Strona podręcznika (lub internetowy podręcznik GNU ) prawie wszystko wyjaśnia.
polecenie find -exec {} \;
Dla każdego wyniku command {}jest wykonywany. Wszystkie wystąpienia {}są zastępowane nazwą pliku. ;jest poprzedzony ukośnikiem, aby zapobiec jego interpretacji przez powłokę.
znajdź -exec polecenie {} +
Każdy wynik jest następnie dołączany commandi wykonywany. Biorąc pod uwagę ograniczenia długości polecenia, myślę, że to polecenie może być wykonywane więcej razy, przy wsparciu strony podręcznika:
całkowita liczba wywołań polecenia będzie znacznie mniejsza niż liczba dopasowanych plików.
Zwróć uwagę na ten cytat ze strony podręcznika:
Linia poleceń jest zbudowana w podobny sposób, w jaki xargs buduje swoje linie poleceń
Dlatego żadne znaki nie są dozwolone między {}i +z wyjątkiem białych znaków. +powoduje, że find wykryje, że argumenty powinny być dołączone do polecenia tak samo, jak xargs.
Rozwiązanie
Na szczęście implementacja GNU mvakceptuje katalog docelowy jako argument, z jednym -tlub dłuższym parametrem --target. Jego użycie będzie:
mv -t target file1 file2 ...
Twoje findpolecenie staje się:
find . -type f -iname '*.cpp' -exec mv -t ./test/ {} \+
Ze strony podręcznika:
-exec polecenie;
Wykonaj polecenie; prawda, jeśli zwracany jest status 0. Wszystkie następujące argumenty do znalezienia są traktowane jako argumenty polecenia, aż do argumentu składającego się z `; ' napotkano. Ciąg `{} 'jest zastępowany przez aktualnie przetwarzaną nazwę pliku wszędzie tam, gdzie występuje w argumentach polecenia, a nie tylko w argumentach, w których występuje samodzielnie, jak w niektórych wersjach find. Obie te konstrukcje mogą wymagać zmiany znaczenia (za pomocą `\ ') lub zacytowania, aby chronić je przed rozszerzaniem przez powłokę. Zobacz sekcję PRZYKŁADY, aby zobaczyć przykłady użycia opcji -exec. Określone polecenie jest uruchamiane raz dla każdego dopasowanego pliku. Polecenie jest wykonywane w katalogu startowym. Istnieją nieuniknione problemy związane z bezpieczeństwem związane z użyciem akcji -exec; powinieneś zamiast tego użyć opcji -execdir.
-exec polecenie {} +
Ten wariant akcji -exec uruchamia określone polecenie na wybranych plikach, ale wiersz poleceń jest tworzony przez dołączanie na końcu każdej wybranej nazwy pliku; całkowita liczba wywołań polecenia będzie znacznie mniejsza niż liczba dopasowanych plików. Linia poleceń jest zbudowana w podobny sposób, w jaki xargs buduje swoje linie poleceń. W poleceniu dozwolone jest tylko jedno wystąpienie `{} '. Polecenie jest wykonywane w katalogu startowym.