我有大量的视频需要转换成mp4。文件夹结构是这样的
Events
Chicago
Boston
San Fran
London Expo
每个活动内部都包含avi格式或.mkv的所有视频。我希望它们转换为相同的文件名。但是使用mp4扩展名。
我的问题是我如何遍历文件夹子文件夹,并保留文件名,因为目前他们有空格。这就是我现在所拥有的。
sourcedir="$1"
destdir="$2"
cd "$sourcedir"
for i in `ls`; do
HandBrakeCLI -i "$i" -o "$destdir/${i%.*}.mp4" --preset="AppleTV"
echo $i
done
菲利普斯代码:
cd "$sourcedir"
echo "Directory: $sourcedir"
destdir = sourcedir
for subdir in *
do
if [[ -d "$subdir" ]]
then
for file in "$subdir"/*
do
HandBrakeCLI -i "$file" -o "${file%.*}.mp4" --preset=AppleTV
echo "$file"
done
fi
done
答案 0 :(得分:2)
使用嵌套循环,不要使用ls
:
for subdir in "$sourcedir"/*
do
if [[ -d "$subdir" ]]
then
for file in "$subdir"/*
do
HandBrakeCLI -i "$file" -o "$destdir/${file%.*}.mp4" --preset=AppleTV
echo "$file"
done
fi
done
另一种选择是使用find
:
find "$sourcedir" -maxdepth 2 -mindepth 2 -type f -exec bash -c 'HandBrakeCLI -i "$0" -o "'"$destdir"'/${0%.*}.mp4" --preset=AppleTV' '{}' ';' -print
两种解决方案都适用于包含空格或换行符的文件名。
答案 1 :(得分:1)
使用for i in "$sourcedir/*"
(或者你已经完成了cd
,你可以for i in *
)。
或执行find "$sourcedir" -type f | while read -r i
(对此,变量i
将包含源目录名称,因此您必须使用大括号展开或basename
来消除它。< / p>
答案 2 :(得分:1)
将程序更改为iVI link to iVi。
这个程序可以做到这一点,甚至比手刹更好......
答案 3 :(得分:0)
bash 4
shopt -s globstar
destdir="/somewhere"
for file in **/*.mkv **/*.avi
do
HandBrakeCLI -i "$file" -o "$destdir/${file%.*}.mp4" --preset=AppleTV
done