微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

持续扫描目录并对新项目执行脚本

如何解决持续扫描目录并对新项目执行脚本

首先,如果这个问题看起来很简单,请原谅我并放轻松;我第一次尝试发布关于另一个主题的问题时,几个月前我没有提供足够的信息。很抱歉。

我正在尝试扫描我传入的媒体文件夹中的新音频文件,并将它们转换为我喜欢的格式到另一个文件夹中,而不删除原始文件

我已经编写了下面的脚本,虽然它似乎可以一次性使用,但我似乎无法让它根据源目录名称创建目标目录名称;我似乎无法弄清楚如何保持循环,“扫描”,以便新媒体到达而不处理它已经处理的内容

我希望这是有道理的...

#! /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) 如果它们已经存在,则不会抱怨。

  • 如果您希望新项目立即得到处理,请查看 ma​​cOS 上的 inotifyfswatch。一般而言,如果不太紧急,请在 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 举报,一经查实,本站将立刻删除。