当我从一个文件中的几个目录运行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
答案 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