2011-03-18 62 views
1

當我從幾個目錄了對單個文件運行shasum,我得到了我希望和最終要:與find巴什腳本文件和xargs的

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

當我從同一個目錄中找到,它列出文件沒有問題:

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

我一直想寫一個bash腳本(或只是一個單一的線),將返回對查找發現的每個文件的個別shasum(有很多),沿其文件名。將文件名管理到shasum不適用於我嘗試過的任何組合。我希望問題在於文件名中的空格,但是在Google搜索之後,嘗試一些find/xargs/ls組合(以及其他人可以使用的各種組合(包括-print0標誌)),我仍然無法找出在這些目錄下的每個文件上運行shasum的方法。

我想輸出的一個例子情況下(惠特莫爾下,假設有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

回答

3

如何使用find-exec選項?

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

+0

非常好!其實'-exec'選項對我來說很有意義,現在我明白了它在這個答案中的用法。我在閱讀時看到了它,但是當我自己嘗試時,我得到了一個關於結局的錯誤「;」我試圖將結果付諸實踐。真是一團糟。感謝您的快速和有益的答案! – JBWhitmore 2011-03-18 18:49:49

0

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

工作嗎?

1

如果你的磁盤快,你可能要並行運行幾個:

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

要了解更多有關GNU並行觀看介紹視頻(如果您是一位天體物理學家,你會很高興你所做的那樣):http://www.youtube.com/watch?v=OpaiGYxkSuQ

0

爲了避免在文件名字符空間的麻煩,使用「\ 0」作爲文件分隔符:

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

-P參數xargs指定應該運行多少個併發進程。而不是

0

發現2010 /惠特莫爾/ * | xargs -0 | shasum

你應該使用

發現2010 /惠特莫爾/ * | xargs shasum