Na pevném disku mám mnoho filmů a mám je uložené v různých složkách podle filmového žánru. Nyní chci v adresáři ponechat pouze určitý počet filmových souborů a smazat vše ostatní. Ještě důležitější je, že chci smazat pouze nejstarší soubory. Tímto způsobem mohu udržovat konstantní počet souborů v každé složce. Vzhledem k tomu, že mám tolik souborů roztroušených v mnoha složkách, je poměrně časově náročný proces přejít do každé složky, vyhledat nejstarší soubory a ručně je jeden po druhém odstranit. Při hledání snadného způsobu, jak to udělat, jsem našel následující řešení. Číst dál. Není to tak těžké.
Najděte a odstraňte nejstarší soubor v adresáři v Linuxu
Řekněme, že chcete najít a odstranit nejstarší soubor, pokud existuje více než 10 souborů v adresáři. jak byste to udělali vy? Je to velmi jednoduché.
Vezměte následující adresář s názvem ostechnix jako příklad. Zkontrolujeme, kolik souborů je v tomto adresáři pomocí příkazu:
$ find ostechnix/ -type f | wc -l
Nebo cd do tohoto adresáře a spusťte:
$ ls | wc -l
Ukázkový výstup:
33
Jak vidíte ve výše uvedeném příkladu, adresář ostechnix obsahuje 33 souborů. Nechci v tomto adresáři 33 souborů. Chci smazat všechny nejstarší soubory a ponechat si pouze 10 souborů.
Nyní najdeme a odstraníme nejstarší soubor(y) v tomto adresáři, pokud obsahuje více než 10 souborů. Chcete-li tak učinit, přejděte do tohoto adresáře:
$ cd ostechnix
A spusťte následující příkaz:
$ ls -1t | tail -n +11 | xargs rm
Nebo,
$ ls -1t | tail -n +11 | xargs rm -f
Kde,
ls
:Vypíše obsah adresáře.-1t
: 1(Číslo jedna ) označuje, že výstupls
by měl být jeden soubor na řádek.t
označuje třídění obsahu podle času úpravy, od nejnovějšího.tail
:Výstup poslední části souborů.-n +11
:vypíše posledních NUM řádků místo posledních 10; nebo použijte -n +NUM pro výstup začínající řádkem NUMxargs
:Vytvářejte a spouštějte příkazové řádky ze standardního vstupu.rm -f
:Odstraňte soubory nebo adresáře.f
označuje ignorovat neexistující soubory a argumenty, nikdy nevyzývat. To znamená, že tento příkaz nezobrazí žádné chybové zprávy, pokud je méně než 10 souborů.|
- Je to potrubí. Obecně se jedná o sekvenci jednoho nebo více příkazů oddělených jedním z ovládacích operátorů|
nebo|&
.
Výše uvedený příkaz tedy odstraní nejstarší soubory, pokud je v aktuálním pracovním adresáři více než 10 souborů. Chcete-li ověřit, kolik souborů je v adresáři po smazání nejstarších souborů, stačí spustit:
$ ls | wc -l
Aktualizace:
Pokud názvy souborů obsahují mezery, výše uvedený příkaz nebude fungovat. Protože xargs
příkaz přebírá prázdné znaky (tabulátory, mezery, nové řádky) jako oddělovače. V takovém případě jej můžete zúžit pouze pro znaky nového řádku ('\n'
) s -d
možnost jako níže:
$ ls -1t | tail -n +11 | xargs -d '\n' rm -f
Doufám, že to pomůže.
Doporučené čtení:
- Jak najít a odstranit soubory starší než X dní v Linuxu
- Smažte soubory, ke kterým se v systému Linux po určitou dobu nepřistupovalo