Estoy ejecutando Mac 10.7.5. En una terminal, usaré este comando para encontrar archivos con cadenas
find src/main -name "*" | xargs grep -i 'mystring'
Sin embargo, cuando los archivos contienen espacios, obtendré resultados como
grep: images/mystuff/essential-questions-selected-arrow-ela: No such file or directory
grep: 5.24.38: No such file or directory
grep: PM.png: No such file or directory
El archivo real en el ejemplo anterior es "essential-questions-selected-arrow-ela 5.24.38 PM.png" ¿Cómo ejecuto el comando anterior correctamente, incluso si los archivos que se buscan contienen espacios?

findyxargsincluido en el soporte OS X la-print0y-0opciones, respectivamente.De lejos, la forma más segura y fácil de hacer este tipo de cosas es usar find's
-execopción. Desdeman find:En otras palabras, la
-execLa opción ejecutará lo que le des en los resultados de buscar, reemplazando{}con cada archivo (o directorio) encontrado. Entonces, para grep para una cadena en particular, harías:Eso, sin embargo, también encontrará directorios y dará un error. Funcionará, fíjate, solo se quejará cuando intentes ejecutarlo en un directorio, habrías tenido el mismo problema usando
xargs. Lo que realmente intentas hacer aquí es encontrar todos los archivos y solo los archivos. En ese caso, el-name '*'no es necesario ya quefind src/maines exactamente lo mismo quefind src/main -name "*". Entonces, en lugar de usar eso, especifique que solo desea buscar archivos:fuente
;o+. De lo contrario serían consumidos por la cáscara, nofind.+, no tiene un significado especial para el shell, que es una de las razones por las que usé eso en lugar de;.