excluir ciertos archivos en ls

61

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
Alice Ryhl
fuente

Respuestas:

82
ls -I <filename>

-I = Ignorar el nombre del archivo, es decir, no enumerar el archivo especificado.

Para ignorar más de un archivo, agregue un -I antes de cada nombre de archivo.

ls -I file1 -I file2

Para ignorar los archivos por sus extensiones de nombre, haga lo siguiente, por ejemplo.

ls -I "*.jpg" -I "*.svg"
De repente
fuente
44
Si usa la opción de forma larga, --ignorepuede extenderla a patrones de globo, por ejemplo, ls --ignore="file?"ols --ignore="file*"
steeldriver
3
también puede usar patrones globales con la forma corta citando los patrones
verboze
18

Para mí, si uso -I una vez, funciona, pero si lo uso dos veces no. Por ejemplo: ls -I *.csvobras.

Pero ls -I *.csv -I *.txtno 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.

Damodar Bashyal
fuente
3
citando * .csv en los primeros trabajos de forma, por ejemplo., 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 restantes
verboze el
La doble cita también funcionó para mí. Gracias @verboze
user38537
Esto es más fácil. Gracias.
Philippe Delteil
6

ls --ignore={"*.jpg","*.png","*.svg"}

Kartikey Tanna
fuente
44
Esto es simplemente usar la expansión de llaves de bash para obtener tres --ignoreopciones. También podría haber usado--ignore="*."{jpg,png,svg}
muru
1

Creo que esto produce el resultado que estás buscando:

ls -1 !(temp)

Aparentemente , necesitas shopt -s extglobque 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:

ls -1 | grep -v '^temp$'

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.

Max Waterman
fuente