There are occasions when you are working with files and folders that contain spaces in them. The problem is any time you try and pipe files / folders containing whitespace to another command-line program, the files / folders containing whitespace are interpreted as separate arguments rather than as a single argument. For example, consider the following directory tree:
Folder With Spaces
Folder With Spaces/FolderWithoutSpaces
Folder With Spaces/FolderWithoutSpaces/file with spaces.txt
FolderWithoutSpaces
FolderWithoutSpaces/fileWithoutSpaces.txt
If you try and run a shell command such as "grep 'some text' $(find . -type f)", you'll get the following output:
grep: ./Folder: No such file or directory
grep: With: No such file or directory
grep: Spaces/FolderWithoutSpaces/file: No such file or directory
grep: with: No such file or directory
grep: spaces.txt: No such file or directory
The big question is, how do you pipe files / folders that have whitespace in them as arguments to a command line program?
Best Answer
You would be better off using the
-exec
action (option) offind
and quoting your arguments.Example:
The quotes will keep the spaces from being interpreted and you don't have to pipe everything through
xargs
unnecessarily.From the
find
man page: