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?

Do zrobienia
źródło

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

lesmana
źródło
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,