为什么以下不将文件复制到目标文件夹?
# 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'
Run Code Online (Sandbox Code Playgroud)
mal*_*pdx 256
如果您的目的是将找到的文件复制到/ home/shantanu/tosend,那么cp的参数顺序会反转:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp "{}" /home/shantanu/tosend \;
Run Code Online (Sandbox Code Playgroud)
注意:find命令使用{}作为匹配文件的占位符
Thi*_*ATR 29
我遇到了类似这样的问题......
实际上,您可以通过两种方式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'
Run Code Online (Sandbox Code Playgroud)
在您的情况下,复制命令语法是错误的,以便将查找文件复制到/home/shantanu/tosend.以下命令将起作用:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;
Run Code Online (Sandbox Code Playgroud)
你需要使用cp -t /home/shantanu/tosend它来告诉它参数是目标目录而不是源.然后,您可以将其更改为-exec ... +,以便cp一次复制尽可能多的文件.