Handling spaces in a directory in bash sh -


i have line cp $(find "$directory" -type f | grep -ie '\.(c|cc|cpp|cxx)$') ~/src searches given directory (in case, $directory /home) , copies file extensions of .c, .cc, .cpp , .cxx src folder, error of cp:cannot stat directory: no such file or directory.

i thought putting directory in quotes prevent that. doing wrong?

the error command cp, quoting $directory, while idea, won't solve error.

your construct fail file/directory names contain spaces, cases grep turns out 0 matches, , other cases can't think of right now.

some better solutions:

  • use find's name matching instead of grep, , use -exec it:

    find "$directory" -type f \( -name '*.c' -o -name '*.cc' -o -name '*.cpp' -o -name '*.cxx' \) -exec cp '{}' ~/src ';'  find "$directory" -type f -regextype posix-egrep -iregex '.*\.(c|cc|cpp|cxx)$' -exec cp '{}' ~/src ';' 
  • use xargs \0 separators instead of \n:

    find "$directory" -type f -print0 | grep -z -ie '\.(c|cc|cpp|cxx)$' | xargs -0 -i{} cp "{}" ~/src 
  • if file structure flat (no subdirectories), use cp:

    cd "$directory"; cp *.c *.cc *.cpp *.cxx ~/src 

Comments

Popular posts from this blog

c# - DetailsView in ASP.Net - How to add another column on the side/add a control in each row? -

javascript - firefox memory leak -

Trying to import CSV file to a SQL Server database using asp.net and c# - can't find what I'm missing -