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

L P*_*L P 41 unix find mv cp

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

find . -mtime 1 -exec du -hc {} +
Run Code Online (Sandbox Code Playgroud)

Ank*_*kur 67

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

find /path/to/search/ -type f -name "glob-to-find-files" | xargs cp -t /target/path/
Run Code Online (Sandbox Code Playgroud)

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

  • `-name`采用全局匹配,而不是正则表达式.一个重要的区别...... (7认同)

Thi*_*ATR 30

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

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

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

    Syntax:
       find <path> <condition> -exec cp '{}' <copy path> \;
    
    Example 
       find -mtime -1 -type f -exec cp '{}' inner/ \;
    
    Run Code Online (Sandbox Code Playgroud)

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

find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)


Lai*_*idy 14

find /PATH/TO/YOUR/FILES -name NAME.EXT -exec cp -rfp {} /DST_DIR \;
Run Code Online (Sandbox Code Playgroud)


kbo*_*ino 6

如果您使用 GNU 查找,

find . -mtime 1 -exec cp -t ~/test/ {} +
Run Code Online (Sandbox Code Playgroud)

这与管道输出一样有效,xargs同时避免了这样做的陷阱(它处理嵌入的空格和换行符而不必使用find ... -print0 | xargs -0 ...)。