Odpowiedzi:
Jeśli nie możesz usunąć katalogu, zawsze możesz użyć find.
find . -maxdepth 1 -type f -exec rm -f {} \;
Spowoduje to usunięcie wszystkich plików z bieżącego katalogu i tylko bieżącego katalogu (nie podkatalogów).
find dir/to/delete -delete
(Nie odradza rm
procesu na plik do usunięcia).
find dir/to/delete -type f -delete
odnaleźć . -maxdepth 1 -type f -exec rm -f {} \;
zajmuje to po prostu zbyt długo (jedno wykonanie rm na plik).
ten jest o wiele bardziej wydajny:
odnaleźć . -maxdepth 1 -typ f -print0 | xargs -r0 rm -f
ponieważ do rm potrzeba tyle nazw plików, ile argumentów, to uruchamia rm przy następnym załadowaniu nazw plików ... może się zdarzyć, że rm jest wywoływany tylko 2 lub 3 razy.
ionice
tuż przed tym rm
jest dobrym pomysłem, jeśli komputer jest używany przez inne osoby w tym samym czasie.
Oba te rozwiązania obejdą problem. Jest to analiza odpowiedniej wydajności każdej techniki nad tutaj .
find . -name WHATEVER -exec rm -rf {} \;
lub
ls WHATEVER | xargs rm -rf
Problem wynika z bash rozwijania „*” z każdym pojedynczym elementem w katalogu. Oba rozwiązania działają kolejno dla każdego pliku.
find . -print0 | xargs -0 rm
).
ls *
”, a „ *
” rozwija się do listy argumentów, na które powłoka narzeka, że jest za długa. ls .
Zamiast tego rób „ ” (lub przejdź na wyższy poziom katalogu i rób „ ls [dirname]
”).
Udało mi się to zrobić, wykonując kopię zapasową jednego poziomu:
cd ..
I działa:
rm directory name -rf
A następnie ponowne utworzenie katalogu.
Wszystkie te wywołania znalezienia są bardzo miłe, ale rzadko pamiętam dokładnie nomenklaturę potrzebną, gdy mi się spieszy: zamiast tego używam ls. Jak ktoś wspomina, ls. działałoby, ale wolę ls -1 jak w:
ls -1 | xargs -n 100 rm -rf
Figura -n xxx jest dość bezpieczna do zabawy, ponieważ przekroczenie maksimum albo zostanie automatycznie skorygowane (jeśli zostanie przekroczony rozmiar max; patrz -s) lub jeśli zostanie przekroczona args-max dla aplikacji, zwykle będzie to raczej oczywisty.
Należy zauważyć, że grep jest przydatny do wstawiania w środku tego łańcucha, gdy chcesz tylko usunąć podzbiór plików w dużym katalogu, a nie z jakiegokolwiek powodu chcesz użyć find.
Ta odpowiedź zakłada, że korzystasz z podstawowych narzędzi Gnu dla swojego ls, xargs itp.
Oto wersja do usuwania dużej liczby plików, gdy system musi pozostać responsywny.
Działa poprzez wydawanie pracy w małych partiach (domyślnie 100 plików) i czekanie trochę na zakończenie innych zadań.
Doskonale działał, usuwając ponad pół miliona plików z jednego katalogu na ext3. Wyświetla procent zrobiony jako mały bonus
noOfFiles=`ls -U | wc -l`
n=0
while (ls -U | tail -n 100 | xargs rm -f); do
n=$((n+100));
sync;
echo -en "$((n*100/noOfFiles))%, ($n of $noOfFiles)\r";
sleep 5;
done
Rozwiązuje błędy „argument zbyt długi” lub „nie można przydzielić pamięci”
To załatwiło ponad 220 000 plików w folderze sesji ...
Zaleta: natychmiast rozpoczyna usuwanie plików
ścieżka cd / do / folderu
ls -f | xargs rm -f -v
KLIKNIJ, aby wyświetlić zrzut ekranu usuwanych plików - (wszystkie pliki zostały usunięte w ~ 15 minut)
-f (po ls) powstrzymuje się od presortowania
-v (po rm) wyświetla każdy plik jako usunięty
-f (po rm) wymusza przejście bez pytania o pliki chronione przed zapisem
Wskazówka: najpierw zmień nazwę folderu (poprzednia sesja na session_old), aby zapobiec dodawaniu dodatkowych plików wygenerowanych automatycznie podczas próby ich usunięcia. Możesz ręcznie przerobić oryginalny katalog, jeśli nie zrobi to automatycznie, jak w moim przypadku