如何解决持续扫描目录并对新项目执行脚本
首先,如果这个问题看起来很简单,请原谅我并放轻松;我第一次尝试发布关于另一个主题的问题时,几个月前我没有提供足够的信息。很抱歉。
我正在尝试扫描我传入的媒体文件夹中的新音频文件,并将它们转换为我喜欢的格式到另一个文件夹中,而不删除原始文件。
我已经编写了下面的脚本,虽然它似乎可以一次性使用,但我似乎无法让它根据源目录名称创建目标目录名称;我似乎无法弄清楚如何保持循环,“扫描”,以便新媒体到达而不处理它已经处理的内容。
我希望这是有道理的...
#! /bin/bash
srcExt=$1
destExt=$2
srcDir=$3
destDir=$4
opts=$5
# Creating the directory name - not currently working
# dirName="$(basename "$srcDir")"
# mkdir "$destDir"/"$dirName"
for filename in "$srcDir"/*.flac; do
basePath=${filename%.*}
baseName=${basePath##*/}
ffmpeg -i "$filename" $opts "$destDir"/"$baseName"."$destExt"
done
for filename in "$srcDir"/*.mp3; do
basePath=${filename%.*}
baseName=${basePath##*/}
ffmpeg -i "$filename" $opts "$destDir"/"$baseName"."$destExt"
done
解决方法
有不同的方法可以做到这一点,最简单的方法可能只是查看文件的“修改日期”并查看它是否已更改,例如:
#! /bin/bash
srcExt=$1
destExt=$2
srcDir=$3
destDir=$4
opts=$5
# Creating the directory name - not currently working
# dirName="$(basename "$srcDir")"
# mkdir "$destDir"/"$dirName"
for filename in ` find "$srcDir" \( -name '*.mp3' -o -name '*.flac' \) -mmin -10`; do
basePath=${filename%.*}
baseName=${basePath##*/}
ffmpeg -i "$filename" $opts "$destDir"/"$baseName"."$destExt"
done
,
-
考虑使用
mkdir -p
,它将 a) 创建所有必要的中间目录,并且 b) 如果它们已经存在,则不会抱怨。 如果您希望新项目立即得到处理,请查看 macOS 上的
inotify
或fswatch
。一般而言,如果不太紧急,请在cron
下安排您的作业每 10 分钟运行一次,可能以nice
为前缀,以免成为 CPU "hog"。 >-
通过将目录更改为源目录并遍历所有文件来决定生成哪些文件。对于每个文件,根据你的规则计算出对应的输出文件应该是什么,测试它是否已经存在,如果不存在则创建它。
不要像那样重复所有的 for
循环代码,只需:
cd "$srcDir"
for filename in *.flac *.mp3 ; do
GENERATE OUTPUT FILENAME
if [ ! -f "$outputfilename" ] ; then
mkdir -p SOMETHING
ffmpeg -i "$filename" ... "$outputfilename"
fi
done
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。