为什么此命令没有将 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/