查找和复制文件

问题描述:

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

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

如果你的目的是要找到的文件复制到/家庭/山塔努/ tosend你的参数CP顺序颠倒:

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

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

+3

什么是'\目的;'? – Astrid 2017-01-13 21:36:42

+2

@Astrid check [this](http://unix.stackexchange.com/questions/12902/how-to-run-find-exec) – shellbye 2017-01-17 08:44:19

+0

Ahh我看到@shellbye - thanks – Astrid 2017-01-17 11:09:49

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

+2

在linux中必须指定目标目录,如下所示: 'find/home/shantanu/processed/-name'* 2011 * .xml'-exec cp --target-directory =/home/shantanu/tosend { } \;' – GuruM 2012-08-14 10:17:05

+0

+1对你有帮助的答案@Ignacio Vazquez-Abrams – GuruM 2012-08-14 10:18:18

+3

如果在顶部答案中提供了完整的命令,可以改进和缩短此答案。 – Brian 2014-04-14 14:58:55

我面临的一个问题是这样的......

实际上,有两种方式可以在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命令的一部分,在按下输入按钮之前应该逃脱。否则,你会得到一个错误这样的

find: missing argument to `-exec' 

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

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

3.如果你有GNU'find' /'xargs','find -print0 | xargs -0 -r cp -t '。例如:'find -mtime -1 -type f -print0 | xargs -r0 cp -t inner /' – 2016-05-03 11:55:03

其中的原因错误是,你正试图要求-r选项文件夹复制也CP 感谢

+3

嗨,因为问题已经回答了(从前一阵子)这不是一个真正相关的答案,它也应该是一个评论(当你有更多的代表)时,除非你愿意扩大并解释它。只是一个头:)。 – W1ll1amvl 2014-12-08 00:57:00