Tato příručka vysvětluje, jak najít a odstranit soubory, které obsahují konkrétní text nebo řetězec v jejich jménech pomocí příkazu find v Linuxu. Kromě toho se také naučíme, jak najít a odstranit soubory, které „ne“ obsahují ve svých názvech konkrétní text.
Úvod
Mám mnoho souborů PDF, které obsahují některé důležité tipy a triky pro Linux. Dal jsem těmto souborům jedinečný název souboru pro snadnější identifikaci.
Řekněme například, že jsem uložil soubory obsahující podrobnosti o konfiguraci serveru LDAP jako ldapconfig.pdf , konfigurační soubor FTP jako ftpconfig.pdf , podrobnosti o konfiguraci serveru DHCP jako dhcp_config.pdf , a tak dále.
Většinu z nich jsem převedl na články a umístil sem na náš blog, aby z nich měli užitek i ostatní uživatelé.
Problém je v tom, že tyto soubory zabírají hodně místa na disku. Protože mám stovky souborů, nechci je ručně hledat a mazat jeden po druhém. Nalezení a odstranění všech souborů může trvat několik hodin.
Při hledání snadného řešení jsem zjistil, že v tomto případě mi může pomoci příkaz „najít“. Po procházení manuálových stránek příkazu find jsem našel vhodné řešení. Čtěte dál.
1. Najděte a smažte soubory, které obsahují konkrétní text ve svém názvu v systému Linux
Podívejte se na následující příklad. V adresáři s názvem "Linux_guides" mám následující soubory .
$ cd Linux_guides/
$ ls apache_config.pdf dhcp_config.pdf ldap_config.pdf php_install.pdf apache_install.pdf ftp_config.pdf mysql_install.pdf
Dokončil jsem instalační část, takže nepotřebuji soubory obsahující slova "install" v jejich názvech souborů.
Namísto hledání a mazání souborů, které obsahují frázi „install“ jeden po druhém, je můžeme odstranit všechny najednou pomocí následujícího příkazu:
$ find -type f -name '*install*' -delete
Výše uvedený příkaz smaže všechny soubory, které mají frázi "install" jejich jménem a vše ostatní si ponechte.
Pokud delete
není k dispozici, můžete použít některý z následujících příkazů:
$ find -type f -name '*install*' -exec rm {} \;
Nebo,
$ find -type f -name '*install*' -exec rm {} +
Můžete se zeptat, zda můžeme udělat totéž pomocí "rm"
příkaz jako níže:
$ rm *install*
Ano, bude to stačit. Nicméně rm install
příkaz odstraní všechny soubory obsahující "install" v názvu souboru z aktuálního adresáře a bude si stěžovat, pokud některý název adresáře obsahuje "install"
.
Ale "find -type f"
příkaz bude rekurzivně vyhledávat pouze soubory v aktuálním adresáři a všech podadresářích.
1.1. Najděte soubory, které obsahují konkrétní text ve svém názvu v Linux
Pokud chcete pouze najít soubory (ne odstranit), stačí odebrat možnosti -delete
nebo -exec rm {} \;
nebo -exec rm {} +
ve výše uvedených příkazech.
Například následující příkaz najde pouze soubory, které obsahují řetězec "install"
v jejich jménech:
$ $ find -type f -name '*install*'
Ukázkový výstup:
./mysql_install.pdf ./apache_install.pdf ./php_install.pdf
2. Najít a odstranit soubory, které „neobsahují“ ve svých názvech konkrétní text v Linux
Víte, jak odstranit soubor, který obsahuje ve svém názvu konkrétní frázi. Podívejme se nyní, jak najít a odstranit soubory, které nemají konkrétní frázi nebo řetězec v jejich jménech.
Chcete-li to provést, stačí přidat '-not'
parametr v příkazu find, jak je uvedeno níže.
$ find -type f -not -name '*install*' -delete
Výše uvedený příkaz nebude smazán soubory, které mají frázi "install"
jejich jménem a smazat vše ostatní.
Pokud smažete není k dispozici, můžete použít některý z následujících příkazů:
$ find -type f -not -name '*install*' -exec rm {} \;
Nebo,
$ find -type f -not -name '*install*' -exec rm {} +
Další podrobnosti o příkazu find naleznete na manuálových stránkách.
$ man find
Závěr
Nyní víte, jak najít soubor, který ve svém názvu obsahuje konkrétní název, a jak odstranit soubor, který má a nemá ve svém názvu konkrétní slovo. To bude užitečné, když chcete odstranit velké množství souborů stejného typu v adresáři.