Bash 批量转换文件夹和子文件夹中的视频
我收集了大量的视频,这些视频都需要转换成mp4。文件夹结构如下所示Bash 批量转换文件夹和子文件夹中的视频,bash,loops,Bash,Loops,我收集了大量的视频,这些视频都需要转换成mp4。文件夹结构如下所示 Events Chicago Boston San Fran London Expo 在每个活动中,保存avi格式或.mkv格式的所有视频。我希望将它们转换为相同的文件名。但是mp4的扩展 我的问题是如何循环遍历文件夹子文件夹,并保留文件名,因为此时它们中有空格。。这是我目前的情况 sourcedir="$1" destdir="$2" cd "$sourcedir" for i in `ls`; do H
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
可以使用$sourcedir/*中的i,也可以使用*中的i
或者找到$sourcedir-type f |在读取-ri时,变量i将包含源目录名,因此您必须使用大括号扩展名或basename将其去掉。在$sourcedir/*中使用for i,或者因为您已经在那里制作了cd,所以您可以在*中为i执行操作
或者在读取-r i时查找$sourcedir-type f |,变量i将包含源目录名,因此您必须使用大括号扩展或basename将其去掉。使用嵌套循环,而不要使用ls: 另一个选项是使用查找:
这两种解决方案都适用于包含空格或换行符的文件名。使用嵌套循环,而不使用ls: 另一个选项是使用查找: 这两种解决方案都适用于包含空格或换行符的文件名。bash 4
shopt -s globstar
destdir="/somewhere"
for file in **/*.mkv **/*.avi
do
HandBrakeCLI -i "$file" -o "$destdir/${file%.*}.mp4" --preset=AppleTV
done
bash 4
将程序更改为iVI
此程序执行trcik,甚至比手刹更好…将程序更改为iVI
这个程序做的很好,甚至比手刹更好…非常感谢它工作得很好,我有一些损坏的avis!非常感谢,它工作得很好,我有一些损坏的阿维斯!1.避免在未选中use set-e或cd | | exit 1的情况下使用cd,或者更好的是,根本不要更改目录;否则,脚本可能会在错误的目录中运行。2.destdir=sourcedir不是赋值,但将尝试调用名为destdir.1的命令。避免在未选中use set-e或cd | | exit 1的情况下使用cd,或者更好的是,根本不要更改目录;否则,脚本可能会在错误的目录中运行。2.destdir=sourcedir不是赋值,但将尝试调用名为destdir的命令。
find "$sourcedir" -maxdepth 2 -mindepth 2 -type f -exec bash -c 'HandBrakeCLI -i "$0" -o "'"$destdir"'/${0%.*}.mp4" --preset=AppleTV' '{}' ';' -print
shopt -s globstar
destdir="/somewhere"
for file in **/*.mkv **/*.avi
do
HandBrakeCLI -i "$file" -o "$destdir/${file%.*}.mp4" --preset=AppleTV
done