使用 find -exec 将文件 cp 到子目录中

使用 find -exec 将文件 cp 到子目录中

为什么此命令没有将 17 个.png文件复制到我当前目录中的子目录中?

$ find . -maxdepth 1 -mtime -3 | wc -l
17
$ find . -maxdepth 1 -mtime -3 -print0 | grep -z loader | xargs -r0 cp -t ./user_name_tutorial/
$ find . -maxdepth 1 -mtime -3 -print0
../Plugins.png./Screenshot from 2015-08-06 22:30:56.png./Screenshot from 2015-08-06 22:28:21.png./Plugins_ex-in-post.png./Screenshot from 2015-08-06 22:31:14.png./Pages_visit_site.png./user_name_tutorial./Page_edit.png./Screenshot from 2015-08-06 22:28:52.png./Page_edit-visual.png./Plugins-google-maps_v2-example.png./Screenshot from 2015-08-06 22:29:27.png./Plugin_google_apps.png./Screenshot from 2015-08-06 22:30:44.png./Media_uploads.png./Plugins_add_new.pnguser_name@COMP_NAME-X:~/Pictures$ 

答案1

您向我们展示了输出

find . -maxdepth 1 -mtime -3 -print0

的输出是什么

find . -maxdepth 1 -mtime -3 -print0 | grep -z loader

?我loader 在您显示的输出中没有看到任何包含该单词的文件名。如果 的输出grep(即 的输入xargs)没有任何内容,那么自然不会复制任何内容。


还,

  • find … | grep foo您可以说find … -name "*foo*"并保存一个进程,而不是。
    除了:

    我注意到您使用了-maxdepth 1,它(如您所知)将搜索限制为当前目录。如果没有那个,find就会查看子目录,然后find … | grep foo会给你全部food_fight任何名为、football或 的子目录中的文件pound_foolish,无论文件的名称,因为grep将查看整个(.-relative)路径名,而不仅仅是文件名。

  • -maxdepth 1不会阻止find报告当前目录中子目录的名称 - 因此,如果您有一个名为loader(或other_loader_files) 的子目录, 其名称会被传递到cp— 这只会给你一条错误消息,因为你没有说cp -r,但可能存在类似的情况,这可能会让你措手不及并做出一些令人讨厌的事情。
  • 您可以通过说 来避免上述(潜在)问题-type f
  • 我意识到您使用了-mtime -3,它(如您所知)根据修改日期限制搜索。请注意,如果您没有使用搜索限制测试,例如-mtime -3-type f,则使用find … -maxdepth 1几乎等同于使用通配符(通常称为“glob”或文件名扩展模式),如

    cp -t ./user_name_tutorial/ *loader*
    

    或者

    cp *loader* ./user_name_tutorial/
    

相关内容