esclude alcuni file in ls


61

Vorrei eseguire ls ed escludere alcuni file nell'output.

Quando eseguo il comando seguente, ottengo tutti i file con ciascuno su una riga:

$ ls -1
file1
file2
file3
temp

Vorrei eseguire questo comando in un modo che mostri

$ ls -1 <insert magic here> temp
file1
file2
file3

Risposte:


82
ls -I <filename>

-I = Ignora il nome file, ovvero non elenca il file specificato.

Per ignorare più di un file, aggiungere un -I prima di ogni nome file.

ls -I file1 -I file2

Per ignorare i file con le loro estensioni, ad esempio, procedi come segue.

ls -I "*.jpg" -I "*.svg"

4
Se si utilizza l'opzione long-form, --ignoreè possibile estenderla a motivi glob, ad esempio ls --ignore="file?"oppurels --ignore="file*"
steeldriver

3
puoi usare i pattern glob anche con la forma breve citando i pattern
verboze del

18

Per me se uso -I una volta, funziona, ma se uso due volte non funziona. es: ls -I *.csvfunziona.

Ma ls -I *.csv -I *.txtnon funziona e restituisce invece i file txt.

--ignore ha fatto il trucco per me. Questo è ciò di cui avevo bisogno e che ho lavorato.

ls -lhrt --ignore="*.gz" --ignore="*.1"

Questo mi elencherà i file dalla cartella di registro in cui esclude i vecchi registri di backup.


3
citando * .csv nel primo modulo funziona, ad es., ls -I '*.txt'. Il motivo per cui non funziona non quotato è a causa dell'espansione della shell, ovvero stai dicendo alla shell di elencare tutti i file CSV invece di escluderli. Quello che sta realmente accadendo è che ignora i primi file .csv e .1 dopo l'espansione, ma elenca i resti
verboze

Le doppie citazioni hanno funzionato anche per me. Grazie @verboze
user38537

questo è più facile. Grazie.
Philippe Delteil,

6

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


4
Questo sta semplicemente usando l'espansione del rinforzo di bash per ottenere tre --ignoreopzioni. Avresti potuto anche usare--ignore="*."{jpg,png,svg}
muru il

1

Penso che questo produca l'output che stai cercando:

ls -1 !(temp)

Apparentemente , hai bisogno shopt -s extglobche funzioni
(l'ho abilitato, quindi suppongo che in un lontano passato l'ho trovato utile e abilitato).

Immagino che potresti anche usare grep per filtrare l'output:

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

L'uso di pipe e filtri offre molta più flessibilità e competenze trasferibili ad altri comandi / situazioni, anche se potresti non essere interessato a questo caso specifico.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.