Me gustaría ejecutar ls y excluir ciertos archivos en la salida.
Cuando ejecuto el siguiente comando, obtengo todos los archivos con cada uno en una línea:
$ ls -1
file1
file2
file3
temp
Me gustaría ejecutar este comando de una manera que muestre
$ ls -1 <insert magic here> temp
file1
file2
file3
--ignore
puede extenderla a patrones de globo, por ejemplo,ls --ignore="file?"
ols --ignore="file*"
Para mí, si uso -I una vez, funciona, pero si lo uso dos veces no. Por ejemplo:
ls -I *.csv
obras.Pero
ls -I *.csv -I *.txt
no funciona y devuelve archivos txt en su lugar.--no hice el truco por mí. Esto es lo que necesitaba y trabajaba.
ls -lhrt --ignore="*.gz" --ignore="*.1"
Eso me listará los archivos de la carpeta de registro donde excluye los registros de copia de seguridad antiguos.
fuente
ls -I '*.txt'
. La razón por la que no funciona sin comillas es por la expansión del shell, es decir, le está diciendo al shell que enumere todos los archivos csv en lugar de excluirlos. Lo que realmente está sucediendo es que ignora los primeros archivos .csv y .1 después de la expansión, pero enumera los restantesls --ignore={"*.jpg","*.png","*.svg"}
fuente
--ignore
opciones. También podría haber usado--ignore="*."{jpg,png,svg}
Creo que esto produce el resultado que estás buscando:
Aparentemente , necesitas
shopt -s extglob
que eso funcione(lo tengo habilitado, así que supongo que en algún momento en el pasado le pareció útil y lo habilité).
Supongo que también podrías usar grep para filtrar la salida:
El uso de una tubería y filtros proporciona mucha más flexibilidad y habilidades que son transferibles a otros comandos / situaciones, aunque es posible que no esté interesado en eso para este caso específico.
fuente