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
所以文件名没有任何扩展名。
答案1
尝试这个:
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,该 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
。