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 rm
avresti bisogno di fare la ricorsione con find
ed 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. zsh
ha rm **/*~foo/bar
- nota che è probabile che si verifichi in limiti di lunghezza degli argomenti per alberi di directory di grandi dimensioni).