Possibile duplicato:
come eliminare tutti i file in una directory tranne alcuni?
Come eliminare tutti i file tranne uno (o alcuni) in Unix?
Qualcosa di simile a
rm -rf -ignore myfile.txt *
Possibile duplicato:
come eliminare tutti i file in una directory tranne alcuni?
Come eliminare tutti i file tranne uno (o alcuni) in Unix?
Qualcosa di simile a
rm -rf -ignore myfile.txt *
Risposte:
ls * | grep -v dont_delete_this_file | xargs rm -rf
Esempio :
mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5
Per rimuovere tutti i file tranne 'test2':
ls * | grep -v test2 | xargs rm -rf
Quindi l'output di "ls" è:
test2
MODIFICARE:
Grazie per il commento. Se la directory contiene alcuni file con spazi:
mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"
Puoi usare (con bash):
rm !("test 1"|"test 4")
'ls' output:
test 1
test 4
ls -1 | grep -v do_not_delete | xargs -I files rm "files"
Questa pagina offre una varietà di opzioni a seconda della shell: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html
Per un ricorsivo rmavresti bisogno di fare la ricorsione con finded escludere i file che volevi conservare (o grep, ma che potrebbero metterti nei guai degli spazi bianchi). Per un shell glob, le shell moderne hanno modelli glob che possono essere usati per escludere i file; questo può essere combinato con la ricorsione globale a livello di shell quando disponibile (ad es. zshha rm **/*~foo/bar- nota che è probabile che si verifichi in limiti di lunghezza degli argomenti per alberi di directory di grandi dimensioni).