使用find和xargs Bash脚本文件

时间:2011-03-18 18:22:47

标签: find xargs sha

当我从一个文件中的几个目录运行shasum时,我得到了我期望并最终想要的东西:

shasum 2010/Whitmore/The\ Astrophysical\ Journal\ 2010\ Whitmore.pdf
5da84767c2301f29ed3b7db7542167150fe63b8b  2010/Whitmore/The Astrophysical Journal 2010 Whitmore.pdf

当我从同一目录运行find时,它列出的文件没问题:

find 2010/Whitmore/* | xargs -0
2010/Whitmore/The Astrophysical Journal 2010 Whitmore.pdf

我一直在尝试编写一个bash脚本(或者只是一行),它将返回find(有很多)找到的每个文件的单个shasum及其文件名。将文件名管道输入shasum在我尝试的任何组合中都不起作用。

我希望问题在于文件名中的空格,但是在Google搜索之后,尝试了一些find / xargs / ls组合(以及其他人的各种组合,包括-print0标志),我仍然无法找到在这些目录下的每个文件上运行shasum的方法。

我想要的输出示例(假设Whitmore下有2个文件),以防获得此结果的方式完全不同:

find 2010/Whitmore/* | xargs -0 | shasum
5da84767c2301f29ed3b7db7542167150fe63b8b  2010/Whitmore/The Astrophysical Journal 2010 Whitmore.pdf
4d2b0a6da00473133b4617d67d9249da3d05cc19  2010/Whitmore/arXiv 2010 Whitmore.pdf

我使用的是Mac OSX 10.6

5 个答案:

答案 0 :(得分:3)

如何使用-exec的{​​{1}}选项?

find

答案 1 :(得分:1)

如果你的磁盘速度很快,你可能想并行运行几个:

find 2010/Whitmore/* -type f | parallel shasum

要了解有关GNU Parallel的更多信息,请观看介绍视频(如果您是天体物理学家,那么您会很高兴):http://www.youtube.com/watch?v=OpaiGYxkSuQ

答案 2 :(得分:0)

find -type f | sed 's/./\\&/g' | xargs shasum

工作?

答案 3 :(得分:0)

要解决文件名中空格字符的问题,请使用'\ 0'作为文件分隔符:

find 2010/Whitmore/ -type f -print0 | xargs -0 -l -P 2 shasum

-P的{​​{1}}参数指定应运行的并发进程数。

答案 4 :(得分:0)

而不是:

  

找到2010 / Whitmore / * | xargs -0 | shasum

你应该使用

  

找到2010 / Whitmore / * | xargs shasum