GNU/Linux >> Znalost Linux >  >> Linux

Smažte všechny soubory kromě 1000 náhodných souborů v adresáři

Smažte všechny soubory kromě 1000 náhodných souborů v adresáři

Kód:

find /path/to/dir -type f -print0 | sort -zR | tail -zn +1001 | xargs -0 rm

Vysvětlení:

  1. Seznam všech souborů v /path/to/dir s find;
    • print0 :použijte \0 (prázdný znak ) jako oddělovač řádků; takže cesty k souborům obsahující mezery/nové řádky neporuší skript
  2. Zamíchejte seznam souborů pomocí sort;
    • -z :použijte \0 (znak null) jako oddělovač, namísto \n (nový řádek)
    • -R :náhodné pořadí
  3. Odstraňte prvních 1000 řádků z náhodného seznamu pomocí tail;
    • -z :považovat seznam za oddělený nulou (stejně jako u sort )
    • -n +1001 :zobrazit řádky začínající od 1001 (tj. vynechat prvních 1000 řádků)
  4. xargs -0 rm - odstranit zbývající soubory;
    • -0 :opět s nulou

Proč je to lepší než donkichotské řešení*:

  1. Funguje s názvy souborů obsahujícími mezery/nové řádky.
  2. Nepokouší se vytvořit žádné adresáře (které již mohou existovat, mimo jiné)
  3. Nepřesune žádné soubory, ani se nedotkne 1000 "šťastných souborů" kromě toho, že je uvádí s find .
  4. V případě výstupu find nezmeškáte soubor nekončí \n (nový řádek) z nějakého důvodu.

* – kredit donkichotovi za | sort -R | head -1000 , mi poskytl výchozí bod.


Linux
  1. Smazat všechny soubory v adresáři, jejichž jméno neodpovídá řádku v seznamu souborů?

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

  3. Bash skript pro odstranění všech souborů kromě N při abecedním řazení

  1. Jak změnit všechny výskyty slova ve všech souborech v adresáři

  2. Najděte všechny nulabajtové soubory v adresáři a podadresářích

  3. Odstraňte úložiště Git, ale ponechte všechny soubory

  1. Smažte všechny soubory kromě nejnovějších 3 v bash skriptu

  2. Odstraňte odpovídající soubory ve všech podadresářích

  3. Zobrazit všechny soubory v adresáři webu?