Jedną z moich powszechnych praktyk jest wykonywanie greps na wszystkich plikach określonego typu, np. Znajdowanie wszystkich plików HTML zawierających słowo „rumpus”. Aby to zrobić, używam
find /path/to -name "*.html" | xargs grep -l "rumpus"
Czasami find
zwraca plik ze spacją w nazwie, np my new file.html
. Po xargs
przekazaniu tego grep
otrzymuję jednak następujące błędy:
grep: /path/to/bad/file/my: No such file or directory
grep: new: No such file or directory
grep: file.html: No such file or directory
Widzę, co się tutaj dzieje: albo potok albo xargs
traktuje spacje jako separatory między plikami. Jednak przez całe życie nie mogę wymyślić, jak temu zapobiec. Czy można to zrobić za pomocą find
+ xargs
? Czy też muszę użyć zupełnie innego polecenia?
Jeśli find a xarg wersje na komputerze nie obsługuje
-print0
i-0
przełączniki (na przykład AIX znaleźć i xargs) można użyć to:Tutaj sed zajmie się ucieczką z przestrzeni dla xargów.
źródło
find
znowu ich wszystkich.