1

当我在单个文件上从多个目录运行 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 上

4

5 回答 5

3

如何使用-exec选项find

find 2010/Whitmore/* -exec shasum {} \;

于 2011-03-18T18:33:07.000 回答
1

如果您的磁盘速度很快,您可能需要并行运行多个:

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

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

于 2011-03-20T21:24:05.507 回答
0

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

工作?

于 2011-03-18T18:26:24.027 回答
0

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

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

-P参数指定它xargs应该运行多少并发进程。

于 2012-08-15T02:29:45.443 回答
0

代替:

查找 2010/Whitmore/* | xargs -0 | 沙苏姆

你应该使用

查找 2010/Whitmore/* | xargs 沙苏姆

于 2013-06-22T12:38:21.160 回答