Mám adresář obsahující velké množství souborů. Chci smazat všechny soubory kromě souboru.txt . Jak to udělám?
Existuje příliš mnoho souborů na odstranění nežádoucích jednotlivě a jejich názvy jsou příliš různorodé na to, aby bylo možné použít * k odstranění všech kromě tohoto jednoho souboru.
Někdo navrhl použít
rm !(file.txt)
ale to nejde. Vrací:
Badly placed ()'s 
Můj operační systém je Scientific Linux 6.
Nějaké nápady?
Přijatá odpověď:
POSIXly:
find . ! -name 'file.txt' -type f -exec rm -f {} +
 odstraní všechny běžné soubory (rekurzivně, včetně skrytých) kromě file.txt . Chcete-li odstranit adresáře, změňte -type f na -type d a přidejte -r možnost rm .
 V bash , použijte rm -- !(file.txt) , musíte povolit extglob:
$ shopt -s extglob 
$ rm -- !(file.txt)
 (nebo voláním bash -O extglob )
 Všimněte si, že extglob funguje pouze v bash a Korn shell family. A pomocí rm -- !(file.txt) může způsobit Argument list too long chyba.
 V zsh , můžete použít ^ pro negaci vzoru se zapnutou extendglob:
$ setopt extendedglob
$ rm -- ^file.txt
 nebo pomocí stejné syntaxe jako ksh a bash s možnostmi ksh_glob a no_bare_glob_qual povoleno.