GNU/Linux >> Znalost Linux >  >> Linux

Odebrat všechny soubory/adresáře kromě jednoho souboru?

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.


Linux
  1. Jak najít soubor v Linuxu ve všech adresářích rekurzivně

  2. Existuje jedna vložka ke kontrole souboru?

  3. Jak odstranit všechny soubory kromě jednoho pojmenovaného souboru z konkrétní složky?

  1. Přesuňte všechny soubory kromě jednoho

  2. jak mohu vyhledat soubory a zazipovat je do jednoho souboru zip

  3. Jak rozdělit jeden textový soubor do více souborů *.txt?

  1. Najděte všechny soubory starší než jedna minuta

  2. Odstraňte všechny symbolické odkazy souborů jedním příkazem

  3. bash - odstraní všechny adresáře (a obsah), ale ne soubory v pwd