Quiero contar el número total de líneas en todos los /etc
archivos pero no los archivos en los subdirectorios, así que escribí: wc -l /etc/* | tail -1
y la salida es como:
xxxx is a directory
yyyy is a directory
total 1752
Mi pregunta es, ¿cómo puedo eliminar (eliminar) estos comentarios, y ¿hay una mejor manera de hacer este tipo de conteo?
Respuestas:
Puede enviar los mensajes de error a / dev / null
Con este comando solo está viendo la cantidad de líneas en los archivos que son legibles en todo el mundo. Para ver el número de líneas de todos los archivos con los que tendría que elevar el comando
sudo
.fuente
Aislar archivos y ejecutar wc en ellos
Lo que
wc -l /etc/*
hace es que*
se expandirá a todos los elementos dentro del/etc/
directorio. Por lo tanto, el objetivo es aislar los archivos y realizarloswc
. Hay varias formas de hacerlo.para bucle con prueba
El
test
comando, o se abrevia con más frecuencia como[
se puede usar para encontrar si un elemento es un archivo normal de esta manera:Por lo tanto, lo que podemos hacer es iterar sobre todos los elementos
/etc/
y ejecutarloswc
si y solo si el comando anterior devuelve verdadero. Al igual que:encontrar
También podemos utilizar
find
con-maxdepth
,-type
y-exec
banderasfind /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepth
informa encontrar qué tan profundo en la estructura del directorio para ir; el valor de 1 significa solo los archivos en el directorio que queremos.-type f
le dice que busque archivos regulares, O (representado por-o
una marca) para enlaces simbólicos (representados portype l
). Todos los que la bondad está encerrado entre paréntesis()
escapado con\
por lo que interpreta concha como parte de defind
comandos, en lugar de otra cosa.-exec COMMAND {} +
estructura aquí ejecuta cualquier comando que le demos,+
lo que indica que debe tomar todos los archivos encontrados y rellenarlos como argumentos de línea de comando al COMANDO.Para producir el total, podríamos canalizar la salida para que me
tail
gusteNota al margen
Es más fácil de usar
wc -l /etc/* 2>/dev/null | tail -1
, como en la respuesta de LD James, sin embargo,find
debería ser parte de un hábito para tratar con archivos para evitar el procesamiento de nombres de archivo difíciles. Para obtener más información al respecto, lea el ensayo Cómo tratar correctamente los nombres de archivofuente
find
hace eso fácilmente:Salida:
PERO si solo quieres el número como salida y nada más:
EDITAR :
newlines
error kos dijo que prevalece. Solo el uso lo-exec
rectifica. Además,/etc
no contiene dichos archivos.Salida:
Como señaló kos , el comando anterior se puede reducir a:
EDITAR :
newlines
error kos dijo que prevalece. Solo el uso lo-exec
rectifica. Además,/etc
no contiene dichos archivos.Salida:
fuente
-iname '*'
? nofind
coincide con todo por defecto?'*'
.Usando z-shell (
zsh
), la reina de las conchas , en lugar de bash.fuente