如何在unix中移动或复制'find'命令列出的文件?

时间:2013-06-28 15:56:56

标签: unix find cp mv

我有一个使用下面的命令看到的某些文件的列表,但是如何将列出的文件复制到另一个文件夹中,比如〜/ test?

find . -mtime 1 -exec du -hc {} +

5 个答案:

答案 0 :(得分:64)

添加到Eric Jablow的答案,这是一个可能的解决方案(它对我有用 - linux mint 14 / nadia)

find /path/to/search/ -type f -name "glob-to-find-files" | xargs cp -t /target/path/

您也可以参考“How can I use xargs to copy files that have spaces and quotes in their names?”。

答案 1 :(得分:28)

实际上,您可以通过两种方式处理复制命令中的find命令输出:

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

    Syntax:
        find <Path> <Conditions> | xargs cp -t <copy file path>
    Example:
        find -mtime -1 -type f | xargs cp -t inner/
    
  2. 但我们的生产数据文件可能包含空格,因此大多数时候此命令都有效:

    Syntax:
       find <path> <condition> -exec cp '{}' <copy path> \;
    
    Example 
       find -mtime -1 -type f -exec cp '{}' inner/ \;
    
  3. 在第二个示例中,最后一部分,分号也被视为find命令的一部分,应在按 Enter 之前进行转义。否则你会收到类似的错误:

    find: missing argument to `-exec'
    

答案 2 :(得分:12)

find /PATH/TO/YOUR/FILES -name NAME.EXT -exec cp -rfp {} /DST_DIR \;

答案 3 :(得分:4)

如果你正在使用GNU find,

find . -mtime 1 -exec cp -t ~/test/ {} +

这可以将输出汇总到xargs,同时避免这样做的陷阱(它处理嵌入空格和换行而不必使用find ... -print0 | xargs -0 ...)。

答案 4 :(得分:0)

这对我来说是最好的方法:

cat filename.tsv  |
    while read FILENAME
    do
    sudo find /PATH_FROM/  -name "$FILENAME" -maxdepth 4 -exec cp '{}' /PATH_TO/ \; ;
    done