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 realizarlos wc
. 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:
[ -f "$FILE" ]
Por lo tanto, lo que podemos hacer es iterar sobre todos los elementos /etc/
y ejecutarlos wc
si y solo si el comando anterior devuelve verdadero. Al igual que:
for i in /etc/*; do [ -f "$i" ] && wc -l "$i" ; done
encontrar
También podemos utilizar find
con -maxdepth
, -type
y -exec
banderas
find /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 por type l
). Todos los que la bondad está encerrado entre paréntesis ()
escapado con \
por lo que interpreta concha como parte de de find
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
guste
$ find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} + | tail -n 1
[sudo] password for xieerqi:
11196 total
Nota 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 archivo