查找和复制文件

时间:2011-03-09 05:12:01

标签: linux copy find

为什么以下内容不会将文件复制到目标文件夹?

# 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'

5 个答案:

答案 0 :(得分:244)

如果您的目的是将找到的文件复制到/ home / shantanu / tosend,那么cp的参数顺序就会反转:

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

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

答案 1 :(得分:27)

我遇到了类似这样的问题......

实际上,您可以通过两种方式在find命令中处理copy命令输出

  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/ \;

  3. 在第二个例子中,最后一部分即分号也被认为是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 感谢