查找和复制文件

为什么下列文件不将文件复制到目标文件夹?

# 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'
343991 次浏览

如果您的意图是将找到的文件复制到 /home/shantanu/tosend中,则 cp的参数顺序将颠倒:

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp "{}" /home/shantanu/tosend  \;

请注意: find命令使用 {}作为匹配文件的占位符。

您需要使用 cp -t /home/shantanu/tosend来告诉它参数是目标目录而不是源。然后您可以将其更改为 -exec ... +,以便让 cp一次复制尽可能多的文件。

我遇到过这样的问题。

实际上,有两种方法可以在 copy命令中处理 find命令输出

  1. 如果 find命令的输出不包含任何空格,例如,如果文件名不包含空格,那么您可以使用下面提到的命令:

    语法: find <Path> <Conditions> | xargs cp -t <copy file path>

    例子: find -mtime -1 -type f | xargs cp -t inner/

  2. 但是大多数时候,我们的生产数据文件中可能包含空间。因此,在大多数情况下,下面提到的命令更加安全:

    语法: find <path> <condition> -exec cp '{}' <copy path> \;

    例子 find -mtime -1 -type f -exec cp '{}' inner/ \;

在第二个示例中,最后一部分(即分号)也被认为是 find命令的一部分,在按 Enter 按钮之前应该转义它。否则,您将得到类似这样的错误

find: missing argument to `-exec'

在您的情况下,复制命令语法错误为了将查找文件复制到 /home/shantanu/tosend。以下命令将工作:

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp  {} /home/shantanu/tosend \;

出现这个错误的原因是您正在尝试将需要-r 选项的文件夹复制到 cp 谢谢

for i in $(ls); do cp -r "$i" "$i"_dev; done;