W twoim przykładzie nie musisz wcale używać, xargsponieważ findzrobi dokładnie i bezpiecznie to, co chcesz zrobić.
Dokładnie to, czego chcesz użyć findto:
find -maxdepth 1 -name '*Cases*' -exec touch {} +
W tym przykładzie -maxdepth 1oznacza tylko wyszukiwanie w bieżącym katalogu, nie schodź do żadnych podkatalogów; domyślnie find będzie szukał we wszystkich podkatalogach (co często jest tym, czego chcesz), chyba że ograniczysz go z maxdepth. Jest {}to nazwa pliku, który zostanie zastąpiony na swoim miejscu i +jest jednym z dwóch znaczników końca polecenia, drugim jest ;. Różnica między nimi polega na tym, ;że polecenie wykonuje się na każdym pliku pojedynczo, natomiast +polecenie wykonuje się na wszystkich plikach jednocześnie. Należy jednak pamiętać, że powłoka będzie prawdopodobnie próbować interpretować ;siebie, więc trzeba będzie uciec z albo \;albo ';'. Tak, findma wiele takich niedogodności, ale jego moc nadrabia to.
Zarówno findi xargssą trudne, aby dowiedzieć się w pierwszej kolejności. Aby pomóc w nauce, xargsspróbuj użyć opcji -plub --interactive, która pokaże polecenie, które zamierza wykonać, i podpowie, czy chcesz je uruchomić.
Podobnie findmożesz użyć -okzamiast, -execaby zapytać, czy chcesz uruchomić polecenie.
Są jednak chwile, kiedy findnie będzie w stanie zrobić wszystkiego, co chcesz, i to jest miejsce xargs. -execPolecenie zaakceptuje tylko jedno wystąpienie {}, więc jeśli wystąpi błąd find -type f -exec cp {} {}.bak \;, możesz zamiast tego zrobić tak :find -type f -print0 | xargs -0 -l1 -IX cp X X.bak
Możesz dowiedzieć się więcej o poleceniach uruchamiania w podręczniku GNU Findutils .
Wspomniałem również, że findbezpiecznie robi to, co chcesz, ponieważ podczas pracy z plikami napotkasz spacje i inne znaki, które będą powodować problemy, xargschyba że użyjesz opcji -0lub --nullwraz z czymś, co generuje elementy wejściowe zakończone znakiem null białych znaków.
xargsi$(...)), xargs jest znacznie bezpieczniejszy niż zastępowanie poleceń. I nie mogę sobie przypomnieć, że kiedykolwiek natrafiłem na prawidłową nazwę pliku z nową linią. Czy problemy z ucieczką i rozszerzaniem słów nie są związane z zastępowaniem poleceń, a nie xargsem?