Linux
在文件夾 1 中搜尋文件,如果該文件不在文件夾 2 中,則執行腳本
folder1
僅包含.flv
文件。
folder2
僅包含.mp4
文件。中的所有
.flv
文件都folder1
應該有一個以 結尾的相應.mp4
文件folder2
:
/folder1/123.flv
和/folder2/123.mp4
。我需要一個腳本來查找任何
.flv
缺少的 a.mp4
並執行一個腳本,該腳本將執行 mencoder 以創建相應的.mp4
. 我已經盡力了,這就是我想出的,但我堅持使用 IF THEN 語句。for i in `find /folder1 -type f -iname '*.flv' -printf "%f\n" | sed 's/.flv//g'` ; do if [[ -n $(find /folder2/$i.mp4 -exec grep \-q 0 {} \;) ]] then /scripts/script.sh $i fi ; done
bash 腳本需要像這樣執行:
/scripts/script.sh $i
所以文件名沒有任何副檔名。
試試這個:
find folder1 -type f -iname '*.flv' -exec bash -c \ 'f=${1#folder1/}; [ -f "folder2/${f%.flv}.mp4" ] || scripts/script.sh "${1%.flv}"' none {} \;
這將使用名稱包含空格或其他難字元的文件。
這個怎麼運作
find folder1 -type f -iname '*.flv'
這會找到 flv 文件
-exec bash -c '...'
對於找到的每個 flv 文件,這會告訴 find 執行 bash,它在引號中執行腳本(見下文)。
f=${1#folder1/}
這將創建一個變數,該變數
f
具有 flv 文件的名稱,但沒有前導目錄。
[ -f "folder2/${f%.flv}.mp4" ]
這將測試是否存在相應的 mp4 文件。
||
這告訴 bash 僅在前面的命令返回 false 時才執行後面的命令(換句話說,如果沒有找到這樣的 mp4 文件)。
scripts/script.sh "${1%.flv}"'
這會在那些缺少 mp4 文件的 flv 文件上執行您的腳本。提供給這些文件
script.sh
的.flv
部分已移除。
none {}
這告訴 bash 將字元串分配
none
給$0
(這個佔位符從不使用)並將由 找到的文件的名稱分配find
給{}
shell 變數$1
。
\;
這標誌著 find
-exec
命令的結束。