为什么以下内容不会将文件复制到目标文件夹?
# 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'
答案 0 :(得分:244)
如果您的目的是将找到的文件复制到/ home / shantanu / tosend,那么cp的参数顺序就会反转:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;
注意:find命令使用 {} 作为匹配文件的占位符
答案 1 :(得分:27)
我遇到了类似这样的问题......
实际上,您可以通过两种方式在find
命令中处理copy
命令输出
如果find
命令的输出不包含任何空格,即文件名中不包含空格,则可以使用下面提到的命令:
语法:find <Path> <Conditions> | xargs cp -t <copy file path>
示例:find -mtime -1 -type f | xargs cp -t inner/
但大多数情况下,我们的生产数据文件可能包含空间。所以下面提到的命令的大部分时间都更安全:
语法:find <path> <condition> -exec cp '{}' <copy path> \;
示例find -mtime -1 -type f -exec cp '{}' inner/ \;
在第二个例子中,最后一部分即分号也被认为是find
命令的一部分,应该在按下回车键之前对其进行转义。否则你会收到类似这样的错误
find: missing argument to `-exec'
在您的情况下,复制命令语法错误,以便将查找文件复制到/home/shantanu/tosend
。以下命令将起作用:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;
答案 2 :(得分:6)
您需要使用cp -t /home/shantanu/tosend
来告诉它该参数是目标目录而不是源。然后,您可以将其更改为-exec ... +
,以便cp
一次复制尽可能多的文件。
答案 3 :(得分:-1)
for i in $(ls); do cp -r "$i" "$i"_dev; done;
答案 4 :(得分:-2)
出现该错误的原因是您尝试将需要-r选项的文件夹复制到cp 感谢