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í:
- Seznam všech souborů v
/path/to/dir
sfind
;print0
:použijte\0
(prázdný znak ) jako oddělovač řádků; takže cesty k souborům obsahující mezery/nové řádky neporuší skript
- 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í
- Odstraňte prvních 1000 řádků z náhodného seznamu pomocí
tail
;-z
:považovat seznam za oddělený nulou (stejně jako usort
)-n +1001
:zobrazit řádky začínající od 1001 (tj. vynechat prvních 1000 řádků)
xargs -0 rm
- odstranit zbývající soubory;-0
:opět s nulou
Proč je to lepší než donkichotské řešení*:
- Funguje s názvy souborů obsahujícími mezery/nové řádky.
- Nepokouší se vytvořit žádné adresáře (které již mohou existovat, mimo jiné)
- Nepřesune žádné soubory, ani se nedotkne 1000 "šťastných souborů" kromě toho, že je uvádí s
find
. - 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.