如何一起使用“convert”和“xargs”?

如何一起使用“convert”和“xargs”?

我需要將一堆.rgb文件轉換為.pngs (每個文件應保留其原始名稱)。

我想了解如何轉換第一個文件,然後將命令包裝在“for”循環中。

這是我到目前為止所擁有的:

find . -name "*.rgb" | sort | sed -n \1\p | xargs convert zzzzz.png

但這是行不通的。

我怎麼才能讓convert指令辨識第二個參數zzzzz.png

答案1

如果你想轉換目錄樹中的所有文件,我會運行:

find . -name '*.rgb' | parallel convert {} {.}.png

這將並行運行:

convert ./foo.rgb ./foo.png
convert ./bar/quux.rgb ./bar/quux.png

這裡我使用 GNU Parallel 來利用你所有的 CPU。根據您的系統,您可以將其安裝為軟體包,否則它就在這裡gnu.org/software/parallel。在 Debian 中是:

apt-get install parallel

編輯:
這是一個沒有的解決方案GNU Parallel

find . -name '*.rgb' -exec sh -c 'convert "$0" "${0%.*}.png"' {} \;

和一個不太好的解決方案使用while..read

find . -name '*.rgb' | while read FILE; do convert "${FILE}" "${FILE%rgb}png" ; done

答案2

要轉換(在我的情況下調整大小)我使用的單一目錄中的所有圖像

ls *.jpg | xargs -I {} convert {} -resize 1024x768 resized/{}

請注意檔案名稱的花括號佔位符可以使用兩次。您也可以使用它向目標檔案名稱添加前綴。

對於遞歸搜尋:

find -name '*.jpg' | xargs -I {} convert {} -resize 1024x768 resized/{}

答案3

我找到了答案:

for i in 'seq 1 $numOfRGBfiles'; do
#Insert code here that finds the file
#name of each rgb file and stores it 
#in $filename.

'find . -name "*.rgb" | sort | sed -n 
\$i\p |  xargs -I {} convert {} 
\$filename.png'
done

相關內容