Jak usunąć wszystkie pliki mniejsze niż określony rozmiar we wszystkich podfolderach?


88

Mam folder z wieloma podfolderami zawierającymi małe pliki tif (mniej niż 160 KB), które zostały połączone w większe pliki pdf wraz z kilkoma dużymi wielostronicowymi plikami tif.

Chcę usunąć wszystkie małe pliki tif bez usuwania większych plików (tif lub pdf) i zachowując strukturę katalogów. Jak to zrobić w systemie Linux za pomocą wiersza polecenia?

Odpowiedzi:


155
find . -name "*.tif" -type 'f' -size -160k -delete

Uruchom polecenie bez -deleteuprzedniego sprawdzenia, czy znaleziono poprawne pliki.

Zwróć uwagę na -wcześniej 160k. Wystarczy 160koznacza dokładnie 160 kilobajtów. -160koznacza mniej niż 160 kilobajtów. +160koznacza większy niż 160 kilobajtów.

Te -type 'f'siły polecenie jedyny akt na plikach i katalogach pominąć. pozwoli to uniknąć błędów, jeśli ścieżka zawiera foldery o nazwach pasujących do wzorca *.tif.

Jeśli chcesz filtrować rozmiar w bajtach (jak w 160 bajtów zamiast 160 kilobajtów) to musisz napisać to tak: 160c. Jeśli tylko napiszesz 160, zostanie zinterpretowany jako 160 * 512 bajtów. Jest to dziwny wymóg POSIX. Przeczytaj tutaj, aby uzyskać więcej informacji: https://unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unit-512-bytes


Strona podręcznika Ubuntu wydaje się o tym wspominać. Tuż pod sekcją „TESTY”: Argumenty liczbowe można określić jako + n dla wartości większej niż n, -n dla wartości mniejszej niż n, n dla dokładnie n.
— jdg

1
dzięki. nie przyszło mi do głowy, że informacje mogą znajdować się gdzie indziej na stronie podręcznika.
— lesmana

Fajnie, że to polecenie działa również rekurencyjnie. Moim przypadkiem użycia byłoby usunięcie plików .txt poniżej 12kB.
— niedz.

nie potrzebujesz sudo?
— Jean-François Gagnon

11
Dla wielkości w bajtach podaj 50c, a nie 50b lub 50!
— Evengard,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.