GNU/Linux >> Znalost Linux >  >> Linux

Najděte a smažte nejstarší soubor, pokud je v adresáři v Linuxu více než X souborů

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ýstup ls 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 NUM
  • xargs :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

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

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

  3. Linux – Jak zjistit, zda jsou ve složce soubory, a podle toho ukončit (v Ksh)?

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

  2. najít a odstranit soubor nebo složku starší než x dní

  3. Jak v Linuxu odstraníte soubory starší než konkrétní datum?

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

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

  3. Jak najít nejstarší soubor ve stromu adresářů v Linuxu