I have a bash/shell function that is supposed to find files then awk/copy the first file it finds to another directory. Unfortunately if the directory that contains the file has spaces in the name the whole thing fails, since it truncates the path for some reason or another. How do I fix it?
If file.txt is in /path/to/search/spaces are bad/ it fails.
dir=/path/to/destination/ | find /path/to/search -name file.txt | head -n 1 | awk -v dir="$dir" '{printf "cp \"%s\" \"%s\"\n", $1, dir}' | sh
cp: /path/to/search/spaces: No such file or directory
*If file.txt is in /path/to/search/spacesarebad/ it works, but notice there are no spaces. :-/
Awk’s default separator is white space. Simply change it to something else by doing:
Your script should look like:
As pointed by the comments, you don’t really need all those steps, you could actually simply do (one-liner):
Formated code (that may look better, in this case ^^):
The
""are used to assign the entire content of the string to the variable, causing the separatorIFS, which is a white space by default, not to be considered over the string.