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


2

Nel 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 cancellare tutto il File quelli tranne File.out?

Previsto ls uscita alla fine:

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

Risposte:


1

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

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

Se si desidera eseguire questa operazione in modo ricorsivo (attraversando tutte le sottocartelle), rimuovere -maxdepth 1:

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

Il io nel - io nome esegue una ricerca senza distinzione tra maiuscole e minuscole, quindi file.*, FILE.*, ecc. saranno cancellati pure. Allo stesso modo, file.OUT sarebbe risparmiato.


1

Prova questo:

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

Questo corrisponde alla tua descrizione: seleziona tutti i file nominati File con qualche estensione, rimuovi quella con estensione .out dalla lista e cancellare gli altri.


0

utilizzando ksh Il globo esteso.

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

Che dice a parole - rimuovi i file che non finiscono in .out o iniziare con File2. o iniziare con FIle2.

ksh extended glob è anche disponibile 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 esiste questo file o potresti rimuovere involontariamente i file.

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.