查找和复制文件

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

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

如果你的意图是将find的文件复制到/ home / shantanu / tosend,你可以将cp的参数顺序颠倒过来:

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

我遇到了这样的问题

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

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

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

    例如: find -mtime -1 -type f | xargs cp -t inner/ 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命令的一部分,在按下回车button之前应该将其转义。 否则,你会得到这样的错误

 find: missing argument to `-exec' 

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

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

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

这个错误的原因是,你正在试图复制一个文件夹,需要-r选项也cp谢谢