通过xargs管道空查找结果导致意外行为

时间:2014-01-24 17:27:54

标签: linux find xargs du

我想出了一个命令来查找文件并使用find,xargs和du打印它们的大小。当我搜索不存在的东西时,我遇到了问题。使用xargs方法,当不存在某些文件时,du会报告所有文件夹,但我希望它不会报告任何内容,因为找不到任何内容。当使用-exec方法时,它可以正常工作,但是从我在大写搜索中阅读和观察到的情况来看,效率较低,因为它为找到的每个文件重复du命令,而不是对找到的文件组进行操作。请参阅提及的部分-delete:http://content.hccfl.edu/pollock/unix/findcmd.htm

这是一个例子。首先,这是目录中的内容:

ls
bar_dir/ test1.foo test2.foo test3.foo

ls bar_dir
test1.bar test2.bar test3.bar

以下是我希望找到结果的两个搜索:

find . -name '*.foo' -type f -print0 | xargs -0 du -h
4.0K ./test2.foo
4.0K ./test1.foo
4.0K ./test3.foo

find . -name '*.bar' -type f -print0 | xargs -0 du -h
4.0K ./bar_dir/test1.bar
4.0K ./bar_dir/test2.bar
4.0K ./bar_dir/test3.bar

这是一个搜索,我希望没有结果,但我得到一个目录列表:

find . -name '*.qux' -type f -print0 | xargs -0 du -h
16K ./bar_dir
32K .

如果我只使用find,则不会返回任何内容(如预期的那样)

find . -name '*.qux' -print0

如果我对du使用-exec方法,它也不会返回任何内容(如预期的那样)

find . -name '*.qux' -type f -exec du -h '{}' \;

当find找不到任何东西时,xargs du方法有什么问题?谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

你看过du --files0-from -吗?

来自man du

   --files0-from=F
          summarize disk usage of the NUL-terminated file names specified in file F; If F is - then read names from standard input

试试这样:

find . -name '*.qux' -type f -print0 | du -h --files0-from -