48

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

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

5 回答 5

74

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

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

您也可以参考“如何使用 xargs 复制名称中包含空格和引号的文件? ”。

于 2013-10-03T06:01:24.733 回答
30

实际上,您可以通过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/ \;
    

在第二个例子中,最后一部分,分号也被认为是find命令的一部分,应该在按下之前转义Enter。否则你会得到一个类似的错误:

find: missing argument to `-exec'
于 2013-12-07T18:13:47.347 回答
18
find /PATH/TO/YOUR/FILES -name NAME.EXT -exec cp -rfp {} /DST_DIR \;
于 2013-12-18T11:28:47.983 回答
6

如果你使用 GNU find,

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

这既可以将输出通过管道传输到xargs其中,又可以避免这样做的陷阱(它可以处理嵌入的空格和换行符,而无需使用find ... -print0 | xargs -0 ...)。

于 2016-04-06T18:18:48.410 回答
-2

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

cat filename.tsv  |
    while read FILENAME
    do
    sudo find /PATH_FROM/  -name "$FILENAME" -maxdepth 4 -exec cp '{}' /PATH_TO/ \; ;
    done
于 2020-07-15T06:24:48.610 回答