Comando terminale per la rimozione di tutti i file con nome tranne uno

2

In Terminal.app , come posso cancellare tutti i file di un certo nome ad eccezione di un'estensione? Ad esempio se ho:

File.docx
File.ppt
File.pdf
File.xlsx
File.out
File.app
FIle.otherextension
File2.docx
File2.ppt
File2.pdf
File2.xlsx
File2.out
File2.app
FIle2.otherextension

tutto in una directory, come posso eliminare tutti i File tranne per File.out ?

Output ls previsto alla fine:

File.out
File2.docx
File2.ppt
File2.pdf
File2.xlsx
File2.out
File2.app
FIle2.otherextension
    
posta Michael Link 05.07.2018 - 17:56
fonte

3 risposte

1

Quanto segue cancellerà tutti i file denominati File (e solo ) all'interno della cartella corrente, tranne quelli con estensione .out :

find . -type f \( -iname "File.*" ! -iname "*.out" \) -delete -maxdepth 1

Se vuoi eseguire questa operazione in modo ricorsivo (attraversando tutte le sottocartelle), rimuovi -maxdepth 1 :

find . -type f \( -iname "File.*" ! -iname "*.out" \) -delete

Il nome i in - i esegue una ricerca insensibile alle maiuscole e minuscole, quindi verranno eliminati anche file.* , FILE.* , ecc. Allo stesso modo, file.OUT verrebbe risparmiato.

    
risposta data 05.07.2018 - 18:47
fonte
1

Prova questo:

ls File.* | fgrep -v .out | xargs rm

Corrisponde alla tua descrizione: seleziona tutti i file denominati File con qualche estensione, rimuovi quello con estensione .out dall'elenco ed elimina gli altri.

    
risposta data 08.07.2018 - 04:13
fonte
0

Utilizzo del glob esteso di ksh .

rm !(*.out|File2.*|FIle2.*)

Che dice in parole- rimuovi i file che non terminano in .out o iniziano con File2. o iniziano con FIle2.

ksh esteso glob è disponibile anche in bash . Devi attivare l'opzione con shopt -s extglob . Questa soluzione non funzionerà se superi ARG_MAX.

Assicurati di essere nella directory in cui questi file esistono o potresti rimuovere involontariamente i file.

    
risposta data 05.07.2018 - 18:29
fonte

Leggi altre domande sui tag