2014-06-05 26 views
0

我試圖找到給定文件夾的子文件夾中的所有圖像,並將它們移動到其他地方。我在運行OS X 10.9.3的Mac上嘗試了以下zsh(我的默認設置)和sh(大多數教程似乎使用的)。找到的作品,但找到-exec不

這將打印出的$someDir子文件夾的所有影像:

find "$someDir" -iname \*.jpg -o -name \*.png -o -name \*.gif 

然而,當我想這些圖像傳遞給另一個命令,我不能讓它開始工作。作爲練習,我echo試了一下:

find "$someDir" -iname \*.jpg -o -name \*.png -o -name \*.gif -exec sh -c "echo hello {}" \; 

它只是靜靜地返回,而$?0

我最終想沿着​​這些線路做一些事情:

find "$someDir" -iname \*.jpg -o -name \*.png -o -name \*.gif -exec sh -c "mv {} $destination" \; 

但我甚至無法獲得echo示例工作。我究竟做錯了什麼?

+0

對不起,如果我標記錯誤。 'find'和'args'看起來不太合適,但他們是我能找到的最好的。 –

+0

'sh -c mv ...'是毫無意義的。只要'-exec mv {} $ destination \;'。確切地說, – Kaz

回答

2

你需要把括號周圍所有的名測試:

find "$someDir" \(-iname \*.jpg -o -name \*.png -o -name \*.gif \) -exec sh -c "echo hello {}" \; 

否則,-exec只對文件做過匹配*.gif

當您忽略該操作時,-o的每個分支中都會有一個默認-print。但是,如果命令中有任何操作選項,則不會在任何地方執行默認操作。

+0

完美!我無法確定發生了什麼的原因是我沒有任何問題文件夾中的GIF文件。謝謝! –

+0

我有相反的問題。我試着運行你的版本,它產生了很多輸出,所以我認爲沒有問題。然後我發現他們只有GIF,沒有J​​PG。 – Barmar

1

這些應該工作(確保$目的地定義)

find "$someDir" \(-iname \*.jpg -o -name \*.png -o -name \*.gif \) -exec echo hello {} 
find "$someDir" \(-iname \*.jpg -o -name \*.png -o -name \*.gif \) -exec mv {} $destination \; 
+0

。沒有多餘的'sh -c'。 – Kaz