Programowanie > Bash, skrypty powłoki
Jak poprawić polecenie wyszukujące największe pliki?
(1/1)
Ravenik:
Wymyśliłem że chcę znaleźć w pewnym katalogu (i podkatalogach) największe pliki na serwerze NAS Austor (potem je będę kasował). Takie polecenie działa:
--- Kod: ---
find . -type f -print0 | xargs -0 du -m "{}" | sort -n -r -k 1 | head -n 20
--- Koniec kodu ---
Chcę to wpisać do skryptu. Jednak w wyniku tego polecenia dostaję przed listą plików jak niżej:
du: {}: No such file or directory
(...)
du: {}: No such file or directory
56320 ./Msi-Ge75-NVME-1/C-root/!!!!!!Main-Storage/!!!!!WAŻNE-SCH/wazneschn.tc
30437 ./Evo-2T/D-root/!Malinowo/max2play/210115 Obraz m2p PI4-8GB, pilot ok, Kodi mrozi, przed update-upgrade/kingston-64G.img
(...)
Pytanie: jak elegancko zmodyfikować ww. polecenie abym nie dostawał w jego wyniku na początku: "du: {}: No such file or directory" powtórzonego ileś razy? Ja prawdę mówiąc nie wiem jak to zrobić ani elegancko ani nieelegancko. Przez nielegancko rozumiem: przekierowując błędy do /dev/null itp. Prośba o pomoc.
Ravenik:
Inne podejście:
--- Kod: ---
find . -type f -size +100M -exec du -m {} ';' | sort -n -r -k 1 | head -n 20
--- Koniec kodu ---
Powyższe nie wypluwa błędów, ale muszę się ograniczać do plików powyżej 100MB, bo ta metoda jest z 200 razy wolniejsza niż ta z pierwszego postu - jeśli zapuszcza się ją dla wszystkich plików czyli:
--- Kod: ---
find . -type f -exec du -m {} ';' | sort -n -r -k 1 | head -n 20
--- Koniec kodu ---
Jeśli ktoś ma pomysł jak naprawić polecenie z pierwszego postu to prośba o odpowiedź
Ravenik:
Kolejne podejście i tym razem działa dobrze:
find . -type f -print0 | xargs -0 du -m | sort -n -r -k 1 | cut -f 2 | head -n 20 | while read line; do du -h "$line"; done
1709:
--- Kod: ---
find . -type f -exec du -ah {} + | sort -hr | head -n 20
--- Koniec kodu ---
Może być 0,1 sekundy szybsze.
Nawigacja
Idź do wersji pełnej