查找和复制文件
为什么以下内容不将文件复制到目标文件夹?
# 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
命令的输出
-
如果
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/
-
但大部分时间我们的生产数据文件可能包含空间。 所以下面提到的大部分命令都比较安全:
语法:
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谢谢