(13 odpovědí)
Uzavřeno před 5 lety.
Zde je situace.
Mám adresář, který obsahuje mnoho souborů s různými příponami. Chci smazat všechny soubory kromě jednoho s konkrétním názvem.
To lze snadno provést pomocí GUI výběrem všech a stisknutím ctrl a zrušení výběru příslušného souboru.
To je přesně to, co chci, ale jak to mohu udělat z příkazového řádku?
Například: dirA obsahuje následující soubory:
a.txt
b.txt
c.php
d.html
a.db
b.db
e.html
Chci smazat všechny soubory a ponechat pouze soubor s názvem a.txt
.
Nejlepší odpověď
Přišel jsem s tímto snadným a skvělým příkazem:
rm !(a.txt)
Můžeš použít ! jako negace
Nejprve otestujte globus pomocí echo, tj.
echo !(a.txt)
Pokud to nefunguje, pro bash
možná to budete muset povolit pomocí
shopt -s extglob
Pokud chcete zachovat oba a.txt
a b.txt
, můžete použít !(a.txt|b.txt)
nebo !([ab].txt)
.
Upravit:
vytvořit rm
funguje rekurzivně, stačí přidat -r
jako
rm -r !(a.txt)
a také pracuje se složkou. stačí změnit název na název adresáře, například a_dir
rm -r !(a_dir)