Why does the following does not copy the files to the destination folder?
# find /home/shantanu/processed/ -name '*2011*.xml' -exec cp /home/shantanu/tosend {} \;
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
i faced an issue something like this...
Actually, in two ways you can process
find
command output incopy
commandIf
find
command's output doesn't contain any space i.e if file name doesn't contain space in it then you can use below mentioned command:Syntax:
find <Path> <Conditions> | xargs cp -t <copy file path>
Example:
find -mtime -1 -type f | xargs cp -t inner/
But most of the time our production data files might contain space in it. So most of time below mentioned command is safer:
Syntax:
find <path> <condition> -exec cp '{}' <copy path> \;
Example
find -mtime -1 -type f -exec cp '{}' inner/ \;
In the second example, last part i.e semi-colon is also considered as part of
find
command, that should be escaped before press the enter button. Otherwise you will get an error something like thisIn your case, copy command syntax is wrong in order to copy find file into
/home/shantanu/tosend
. The following command will work:If your intent is to copy the found files into /home/shantanu/tosend you have the order of the arguments to cp reversed:
Note: find command use {} as placeholder for matched file
You need to use
cp -t /home/shantanu/tosend
in order to tell it that the argument is the target directory and not a source. You can then change it to-exec ... +
in order to getcp
to copy as many files as possible at once.The reason for that error is that you are trying to copy a folder which requires -r option also to cp Thanks