GNU/Linux >> Znalost Linux >  >> Linux

Jak vyloučit některé soubory z mechanismu rozšíření názvu souboru v Bash?

V kořenovém adresáři mám adresáře souborového systému ubuntu a omylem jsem do kořenového adresáře zkopíroval stovky souborů.

Intuitivně jsem se pokusil odstranit zkopírované soubory vyloučením systému souborů jako

rm -rf !{bin,sbin,usr,opt,lib,var,etc,srv,libx32,lib64,run,boot,proc,sys,dev} ./.

ale nejde to. Jaký je správný způsob, jak vyloučit některé adresáře a zároveň smazat celý?

EDIT:Nikdy nezkoušejte žádný ze zde uvedených příkazů, aniž byste věděli, co dělat!

Přijatá odpověď:

Protože používáte bash :

shopt -s extglob
echo rm -rf ./!(bin|sbin|usr|...)

Doporučuji přidat echo na začátku příkazového řádku, když spouštíte něco, co potenciálně může vyhodit do vzduchu celý systém. Pokud jste s výsledkem spokojeni, odstraňte jej.

Poznámka:Výše ​​uvedený příkaz neodstraní skryté soubory (ty, jejichž název začíná tečkou). Pokud je chcete také odstranit, aktivujte také dotglob možnost:

shopt -s dotglob

Linux
  1. Jak odstraním soubory z koše na Ubuntu?

  2. Jak odstranit řádky, které se objevují v souboru B, z jiného souboru A?

  3. Jak můžete odstranit duplikáty z historie bash?

  1. Jak extrahovat název souboru bez přípony z úplné cesty?

  2. Jak vyloučit soubory z archivu TAR pomocí regulárních výrazů?

  3. Jak vyloučit některé uživatele z horní obrazovky Linuxu?

  1. Jak vyloučit soubory určité velikosti z kopírování v Linuxu

  2. Jak rekurzivně odebrat oprávnění ke spouštění ze souborů, aniž byste se dotkli složek?

  3. Je možné vyloučit některé soubory z Rm -rf?