Te nawiasy klamrowe są pozostawione same przez uderzenie; należą one do findi xargs, odpowiednio, i są opisane w ich roboczo stronach.
man find
-exec Komenda ;
Wykonaj polecenie ; true, jeśli zwracany jest status 0. Wszystkie następujące argumenty do znalezienia są uważane za argumenty polecenia, dopóki nie zostanie znaleziony argument składający się z ;. Ciąg {}jest zastępowany bieżącą nazwą pliku przetwarzaną wszędzie tam, gdzie występuje w argumentach polecenia, a nie tylko w argumentach, w których jest on sam, jak w niektórych wersjach find. Obie te konstrukcje mogą wymagać ucieczki (za pomocą a \) lub cytowania, aby uchronić je przed rozszerzeniem przez powłokę. Przykłady użycia tej -execopcji znajdują się w sekcji PRZYKŁADY . Podane
poleceniejest uruchamiany raz dla każdego dopasowanego pliku. Polecenie jest wykonywane w katalogu startowym. Istnieją nieuniknione problemy bezpieczeństwa związane z korzystaniem z -exec
akcji; -execdirzamiast tego powinieneś użyć tej opcji.
-exec Komenda {} +
Ten wariant -execakcji uruchamia określone polecenie na wybranych plikach, ale linia poleceń jest budowana przez dołączenie każdej wybranej nazwy pliku na końcu; całkowita liczba wywołań polecenia będzie znacznie mniejsza niż liczba dopasowanych plików. Wiersz poleceń jest budowany w taki sam sposób, jak xargswiersze poleceń. {}W poleceniu dozwolona jest tylko jedna instancja Polecenie jest wykonywane w katalogu startowym. Jeśli findwystąpi błąd, może to czasami spowodować natychmiastowe wyjście, więc niektóre oczekujące polecenia mogą w ogóle nie zostać uruchomione. Ten wariant -execzawsze zwraca wartość true.
-execdir Komenda ;
-execdir Komenda {} +
Podobnie -exec, ale określone polecenie jest uruchamiane z podkatalogu zawierającego dopasowany plik, który zwykle nie jest katalogiem, w którym zacząłeś znajdować. Jest to znacznie bezpieczniejsza metoda wywoływania poleceń, ponieważ pozwala uniknąć warunków wyścigu podczas rozwiązywania ścieżek do dopasowanych plików. Podobnie jak w przypadku -exec akcji,
+ forma -execdir utworzy wiersz poleceń do przetworzenia więcej niż jednego dopasowanego pliku, ale każde wywołanie polecenia wyświetli tylko pliki, które istnieją w tym samym podkatalogu. Jeśli skorzystasz z tej opcji, musisz upewnić się, że twoja $PATHzmienna środowiskowa nie odwołuje się.; w przeciwnym razie atakujący może uruchomić dowolne polecenia, pozostawiając odpowiednio nazwany plik w katalogu, w którym będziesz działać -execdir. To samo dotyczy wpisów, $PATHktóre są puste lub które nie są absolutnymi nazwami katalogów. Jeśli findwystąpi błąd, może to czasami spowodować natychmiastowe wyjście, więc niektóre oczekujące polecenia mogą w ogóle nie zostać uruchomione. Wynik działania zależy od tego, +czy ;używany jest wariant lub ;
-execdir polecenie {} + zawsze zwraca true, a -execdir polecenie {} ; zwraca true tylko wtedy, gdy polecenie zwraca 0.
man xargs
-I replace-str
Zamień wystąpienie replace-str w argumentach początkowych na nazwy odczytane ze standardowego wejścia. Ponadto, niecytowane puste miejsca nie kończą elementów wejściowych; zamiast tego separatorem jest znak nowej linii. Implikuje -xi -L 1.
-i[ replace-str ], --replace[ =replace-str ]
Ta opcja jest synonimem -Ireplace-str, jeśli podano replace-str . Jeśli brakuje argumentu replace-str , efekt jest taki sam jak -I{}. Ta opcja jest przestarzała; użyj -Izamiast tego.
Edytuj: a tutaj DLACZEGO bash ignoruje te nawiasy klamrowe:
man bash
{ lista; }
lista jest po prostu wykonywana w bieżącym środowisku powłoki. lista musi być zakończona znakiem nowej linii lub średnikiem. Jest to znane jako polecenie grupowe. Status powrotu to status wyjścia z listy. Zauważ, że w przeciwieństwie do metaznaków ( i ) , { i } są słowami zastrzeżonymi i muszą wystąpić, gdy słowo zastrzeżone może zostać rozpoznane. Ponieważ nie powodują podziału słów, muszą być oddzielone od listy spacją lub innym metaznakiem powłoki.
Dla podkreślenia: lista musi być zakończona znakiem nowej linii lub średnikiem .
{}- co oznacza,targetsże działając nafindpolecenie, usuwają /rmodnajdują pliki.