Buduj komendę find bez wkuwania flag
Linuksowa komenda find to najpotężniejsza rzecz w shellu i jednocześnie najbardziej upierdliwa do zapamiętania. „-mtime -7 czy +7? -size +100M to większe czy mniejsze? Jak bezpiecznie usunąć wyniki?" Za każdym razem kończysz na tej samej odpowiedzi ze Stack Overflow z 2012 roku.
Ten builder odwraca sytuację. Klikasz co chcesz (ścieżka, wzorzec nazwy, typ pliku, rozmiar, czas modyfikacji, akcja), a komenda pojawia się po prawej, gotowa do skopiowania. Bez wykonywania, bez ryzyka: to builder, nie runner. Komenda uruchamia się dopiero wtedy, kiedy wkleisz ją do własnego terminala, gdzie możesz ją najpierw przeczytać.
Co możesz zbudować:
- przeszukanie folderu po globie (`*.log`, `*.tmp`), nazwie, ścieżce albo regexie
- filtr po typie (plik, katalog, link symboliczny, urządzenie blokowe)
- filtr po rozmiarze (`-size +100M` = większe niż 100 megabajtów)
- filtr po czasie (`-mtime -7` = zmienione w ostatnich 7 dniach)
- filtr po właścicielu, grupie, uprawnieniach, pusty / wykonywalny / do odczytu / do zapisu
- wybór akcji: wypisz, wypisz z null-terminator dla `xargs -0`, usuń, uruchom komendę dla każdego dopasowania, albo wsadowo dla wszystkich
Podgląd pokazuje też symulowany sample wyniku, żebyś zobaczył co komenda by dopasowała, zanim odpalisz ją na prawdziwych danych.
Jak używać
- Wpisz ścieżkę startową w „Gdzie szukać". Domyślnie . (bieżący folder). Użyj /var/log dla logów systemowych, ~/Pobrane dla folderu pobranych, albo / dla całego systemu (wolne, zwykle wymaga roota).
- Włącz sekcję, której potrzebujesz (każdy panel ma własny przełącznik). Nie musisz wypełniać wszystkich, tylko te, które są istotne dla wyszukiwania.
- Wybierz wzorzec nazwy: wpisz coś jak `*.log` i wybierz tryb. \-name to najczęstsze (glob, czuły na wielkość liter). \-iname ignoruje wielkość. \-path dopasowuje pełną ścieżkę razem z folderami. \-regex dopasowuje wyrażenie regularne.
- Wybierz typ pliku w pasku chipów: plik, katalog, link symboliczny. Możesz zaznaczyć kilka typów naraz (find traktuje je jako OR).
- Ustaw filtr rozmiaru. Porównanie: = dokładnie, > większe niż, < mniejsze niż. Wybierz jednostkę: c (bajty), k (kilobajty), M (megabajty), G (gigabajty). Przykład: `-size +100M` znajduje pliki większe niż 100 megabajtów.
- Ustaw filtr czasu. Wybierz zmodyfikowany (\-mtime), odczytany (\-atime) albo zmieniony (\-ctime), potem jednostkę (minuty / godziny / dni) i liczbę. \-mtime -7 znaczy „zmieniony w ostatnich 7 dniach".
- Wybierz akcję: \-print (domyślne, wypisuje ścieżki), \-print0 (zakończone null-bytem, do pipowania w `xargs -0`), \-delete (usuwa dopasowania, niebezpieczne, pokazujemy duże czerwone ostrzeżenie), albo \-exec ... \; żeby uruchomić komendę dla każdego dopasowania. Użyj {} jako placeholdera dla ścieżki.
- Skopiuj komendę z panelu podglądu po prawej. Otwórz terminal, wklej, przeczytaj co robi, dopiero potem wciśnij Enter. Builder nigdy niczego nie wykonuje sam.
Kiedy się przydaje
Sześć momentów, w których sięgasz po find i nie chcesz więcej wkuwać flag:
- Czyszczenie starych logów. Dysk jest pełny, `/var/log` wygląda podejrzanie. Chcesz wszystko starsze niż 90 dni kończące się na .log: `find /var/log -type f -name "*.log" -mtime +90 -delete`. Builder generuje to w 4 kliknięcia, czytasz najpierw, żeby się upewnić, że nie wpisałeś przypadkiem -mtime -90.
- Szukanie ogromnych plików zżerających dysk. `df` mówi, że dysk jest w 90% pełny, ale nie wiesz, który folder za to odpowiada. Pytasz o wszystkie pliki większe niż 1 GB w całym systemie: `find / -type f -size +1G`. Sortujesz po rozmiarze, atakujesz najgorszych winowajców.
- Lista zmian z dzisiaj. Uruchomiłeś instalator albo skrypt buildujący i chcesz wiedzieć, jakie pliki ruszyły. `find / -type f -mtime -1` pokazuje wszystko zmienione w ostatnich 24 godzinach. Przydaje się przy debugowaniu, audytach bezpieczeństwa i pytaniu „skąd się wziął ten config".
- Masowe przetwarzanie plików. Chcesz przekonwertować każde zdjęcie .heic na .jpg: `find ~/Zdjecia -name "*.heic" -print0 | xargs -0 -I {} convert {} {}.jpg`. Combo \-print0 plus `xargs -0` to bezpieczna droga: radzi sobie z nazwami plików ze spacjami, cudzysłowami i unicode.
- Usuwanie pustych katalogów. Po dużej przeprowadzce niektóre foldery zostają puste. `find . -type d -empty -delete` usuwa je za jednym zamachem. Builder pokazuje dokładną komendę przed uruchomieniem.
- Znajdowanie plików ze złymi uprawnieniami. Serwer WWW rzuca 403, bo część plików nie jest czytelna dla świata. `find /var/www -type f ! -perm -044` pokazuje pliki, których „others" nie mogą czytać. Poprawiasz przez `chmod`.