GNU/Linux >> Znalost Linux >  >> Linux

Odstraňte soubory a adresáře podle jejich jmen. Žádný takový soubor nebo adresář?

Potřebuji smazat všechna kompilovaná data:

  • adresáře s názvem build ,
  • adresáře s názvem obj ,
  • soubory *.so.

Napsal jsem příkaz

find ( -name build -o -name obj -o -name *.so ) -exec rm -rf {} ;

který projde všechny adresáře rekurzivně a odstraní vše, co potřebuji.

Proč mám na konci takový výstup?
Možná bych měl napsat jiný příkaz.

find: `./3/obj': No such file or directory
find: `./3/build': No such file or directory
find: `./1/obj': No such file or directory
find: `./1/build': No such file or directory
find: `./2/obj': No such file or directory
find: `./2/build': No such file or directory

Přijatá odpověď:

Použijte -prune na adresáře, které se stejně chystáte smazat, abyste řekli find neobtěžovat se v nich hledat soubory:

find . ( -name build -o -name obj -o -name '*.so' ) -prune -exec rm -rf {} +

Všimněte si také, že *.so musí být citován, protože jinak může být shellem rozšířen na seznam .so soubory v aktuálním adresáři.

Ekvivalent vašeho GNU -regex -typ jedna by byl:

find . ( -name build -o -name obj -o -name '*?.so' ) -prune -exec rm -rf {} +

Všimněte si, že pokud budete používat specifickou syntaxi GNU, můžete také použít -delete místo -exec rm -rf {} + . Pomocí -delete , GNU find zapne -depth automaticky. Nespouští externí příkazy, takže tímto způsobem je efektivnější a také bezpečnější, protože odstraňuje konfliktní podmínky, kdy vás někdo může přimět odstranit nesprávné soubory změnou adresáře na symbolický odkaz v mezidobí find najde soubor a rm odstraní jej (viz info -f find -n 'Security Considerations for find' podrobnosti).

find . -regextype posix-egrep -regex '.*/((obj|build)(/.*)?|.+.so)' -delete

Linux
  1. Najděte soubory a adresáře v Linuxu jako profík

  2. Jak odstranit soubory a adresáře v Linuxu z příkazového řádku

  3. Použijte Najít k nalezení určitého adresáře a odstranění všech souborů v něm kromě jednoho adresáře?

  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Přejmenujte všechny soubory a názvy adresářů na malá písmena v Linuxu

  3. Jak najít a odstranit prázdné adresáře a soubory v Linuxu

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

  2. Přesouvat soubory čtením jejich názvů souborů do různých adresářů?

  3. Linux Odstraňte soubory a adresáře