Zezwalam, aby skrypt generowania danych działał zbyt długo, ma teraz ponad 200 000 plików, których potrzebuję do około 1000. Z wiersza poleceń Linuksa istnieje prosty sposób na usunięcie wszystkich oprócz 1000 tych plików, w których pliki zostałyby zachowane nie miałby zależności od nazwy pliku lub innego atrybutu?
13
Odpowiedzi:
Usuń wszystkie oprócz 1000 losowych plików z katalogu
Kod:
Wyjaśnienie:
/path/to/dir
pomocąfind
;print0
: użyj\0
( znak null ) jako separatora wiersza; więc ścieżki do plików zawierające spacje / znaki nowej linii nie psują skryptusort
;-z
: użyj\0
(znak null) jako separatora zamiast\n
(nowa linia)-R
: losowe zamówienietail
;-z
: traktuj listę jako rozdzielaną zerami (tak samo jak w przypadkusort
)-n +1001
: pokaż linie zaczynające się od 1001 (tzn. pomiń pierwsze 1000 linii)xargs -0 rm
- usuń pozostałe pliki;-0
: ponownie zeroDlaczego jest lepszy niż rozwiązanie quixotic *:
find
.find
nie kończy się na\n
(nowa linia).* - zasługa quixotic za
| sort -R | head -1000
, dała mi punkt wyjścia.źródło
find . -type f | sort -R | tail -n +1001 | xargs rm
find
? Spróbuję poprawić swoją odpowiedź, po prostu potrzebuję trochę wkładu do pracy.tail: invalid option -- 'z'
wersja ogona, którą mam, to 8.4Użyj katalogu tymczasowego, a następnie
find
wszystkich plików, losowo za pomocą listysort
przenieś górne 1000 listy do katalogu tymczasowego. Usuń resztę, a następnie przenieś pliki z powrotem do katalogu tymczasowego.Jeśli
xargs
narzekasz na długość linii, użyj mniejszej liczby za pomocąhead
i powtórz polecenie w razie potrzeby (tj. Zmień-1000
go-500
i uruchom dwa razy lub zmień-200
i uruchom go 5 razy).Nie będzie również obsługiwać nazw plików zawierających spacje; jak @ odpowiedziami RLD w pokazach, można użyć
find
„s-print0
argument,-z
argumentysort
ihead
, i-0
zexargs
w celu zapewnienia właściwej obsługi nazw plików.Wreszcie, jeśli
tmp-dir
już istnieje, należy zastąpić nazwę katalogu, który nie istnieje.źródło
find
zawiera spację.Użytkownicy komputerów Mac powinni wykonać następujący skrypt.
tr
pozwoli sortowaniu i ogonowi działać na listach z\n
zamiast\0
.źródło
Najłatwiej może być rm -rf katalogu, a następnie ponownie uruchomić skrypt generowania danych, upewniając się, że nie będzie działać zbyt długo.
źródło