Je veux compter le nombre total de lignes dans tous les /etc
fichiers mais pas les fichiers dans les sous-répertoires, j'ai donc tapé: wc -l /etc/* | tail -1
et la sortie est comme:
xxxx is a directory
yyyy is a directory
total 1752
Ma question est, comment puis-je supprimer (supprimer) ces commentaires et existe-t-il une meilleure façon de faire ce type de décompte?
Réponses:
Vous pouvez afficher les messages d'erreur dans / dev / null
Avec cette commande, vous ne voyez que le nombre de lignes dans les fichiers qui sont lisibles par tous. Pour voir le nombre de lignes de tous les fichiers, vous devez augmenter la commande avec
sudo
.la source
Isolez les fichiers et exécutez wc dessus
Qu'est
wc -l /etc/*
- ce qui est*
étendu à tous les éléments du/etc/
répertoire. L'objectif est donc alors d'isoler les fichiers et de les exécuterwc
. Il existe plusieurs façons de procéder.pour boucle avec test
La
test
commande, ou plus fréquemment abrégée,[
peut être utilisée pour déterminer si un élément est un fichier normal comme ceci:Ainsi, ce que nous pouvons faire est d'itérer sur tous les éléments
/etc/
et de les exécuterwc
si et seulement si la commande ci-dessus renvoie true. Ainsi:trouver
Nous pouvons également utiliser
find
avec-maxdepth
,-type
et-exec
drapeauxfind /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepth
informe de la profondeur de la structure du répertoire; la valeur 1 signifie uniquement les fichiers du répertoire que nous voulons.-type f
lui indique de rechercher des fichiers normaux, OU (représenté par un-o
indicateur) pour les liens syboliques (représentés partype l
). Toute cette bonté est enfermée entre crochets()
échappés de\
sorte que shell les interprète comme faisant partie de lafind
commande, plutôt que quelque chose d'autre.-exec COMMAND {} +
La structure exécute ici la commande que nous lui donnons,+
indiquant de prendre tous les fichiers trouvés et de les remplir comme arguments de ligne de commande pour la commande.Pour produire un total, nous pourrions canaliser la sortie à
tail
aimerNote de côté
Il est plus facile à utiliser
wc -l /etc/* 2>/dev/null | tail -1
, comme dans la réponse de LD James, maisfind
devrait faire partie d'une habitude de traiter les fichiers pour éviter de traiter les noms de fichiers difficiles. Pour plus d'informations à ce sujet, lisez l'essai Comment gérer correctement les noms de fichiersla source
find
le fait facilement:Production:
MAIS si vous voulez juste le nombre en sortie et rien d'autre:
EDIT :
newlines
erreur kos dit prévaut. Utiliser uniquement le-exec
rectifie. En outre,/etc
ne contient pas de tels fichiers.Production:
Comme indiqué par kos , la commande ci-dessus peut être réduite à:
EDIT :
newlines
erreur kos dit prévaut. Utiliser uniquement le-exec
rectifie. En outre,/etc
ne contient pas de tels fichiers.Production:
la source
-iname '*'
? nefind
correspond pas à tout par défaut?'*'
.En utilisant z-shell (
zsh
), la reine des coquilles , au lieu de bash.la source