我正在嘗試用于在檔案夾中的每個檔案xargs上運行ffmpeg并輸出具有 vorbis 音頻的檔案的名稱。
我提出了以下大多數有效的方法,但它在檔案名中包含單引號的檔案上失敗。
find . -maxdepth 1 | onlyvideos | tr '\n' '\0' | xargs -n1 -0 -I '{}' bash -c "if ( ffmpeg -i '{}' 2>&1 | grep Stream | grep -q vorbis ) ; then echo '{}' ; fi;"
onlyvideos 是我寫的一個腳本,它只將帶有視頻擴展名的檔案名列印到標準輸出。
我怎樣才能在可能包含單引號和雙引號中的一個或兩個的檔案名xargs上運行bash -c?
uj5u.com熱心網友回復:
可能所有這些都可以簡化很多,但是如果您想堅持使用您的onlyvideos腳本,您可以嘗試:
find . -maxdepth 1 | onlyvideos | tr '\n' '\0' |
xargs -n1 -0 bash -c 'if ( ffmpeg -i "$1" 2>&1 | grep Stream | grep -q vorbis ) ; then echo "$1" ; fi;' bash
說明:bash -c 'cmd' arg0 arg1執行cmd時位置引數設定為$0=arg0(bash在我們的例子中) 和$1=arg1(在我們的例子中是檔案名,通過xargs)。因此,"$1"在您的命令腳本中使用'cmd'應該可以按您的預期作業。
uj5u.com熱心網友回復:
一種while風格
find . -maxdepth 1 | onlyvideos | while read f; do if ( ffmpeg -i "$f" 2>&1 | grep Stream | grep -q vorbis ) ; then echo "$f" ; fi; done
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/314563.html
上一篇:使用For回圈重命名Bash
