【问题标题】:loop over songs accessing exifdata sequentially循环访问顺序访问 exifdata 的歌曲
【发布时间】:2021-12-31 04:52:24
【问题描述】:

以下代码的工作原理是根据它们的 exifdata 将我的松散曲目从 +++ 文件夹排序到相应的 Artist/Loosies 文件夹。它将复制或创建一个文件夹然后复制。

目前,如果我在 +++ 目录中只有一首歌曲,它就可以工作,但只要我添加两首,脚本就会在第一个 exiftool 命令处停止。

*我想使用 bash 来完成这项工作,我意识到可能有一种更简单/更快的方法可以只使用 exiftool 来完成这项工作,但我开始这样做是为了自学 bash 脚本。

#!/usr/bin/env bash
loosies='Loosies'
for song in ~/Music/+++;
do
    artist=`exiftool -r -q -Artist $song` ;
    album=`exiftool -r -q -Album $song` ;
    title=`exiftool -r -q -title $song` ;
    title=${title#*: } ;
    album=${album#*: } ;
    artist=${artist#*: } ;
    if [[ -d  ~/Music/Artists/${artist} ]] ;
    then
        if [[ -d  ~/Music/Artists/${artist}/${album} ]] ; then
            echo ~/Music/Artists/${artist}/${album} ;
            cp -r $song/. ~/Music/Artists/${artist}/${album} ;
        else
            mkdir ~/Music/Artists/${artist}/${loosies} ;
            cp -r $song/. ~/Music/Artists/${artist}/${loosies} ;
            if [[ -f ~/Music/Artists/${artist}/${loosies}/${title} ]] ; then
                exiftool "${song}" -Artist -Album > ~/'success.txt';
            else
                exiftool "${song}" -Artist -Album > ~/'fail.txt';
            fi
        fi
    else
        mkdir ~/Music/Artists/$artist ;
        mkdir ~/Music/Artists/${artist}/${loosies} ;
        cp -r~/Music/Artists/${artist}/${loosies} ;
        if [[ -f ~/Music/Artists/$artist/$album/$title ]] ; then
            exiftool "${song}" -Artist -Album > ~/'success.txt';
        else
            exiftool "${song}" -Artist -Album > ~/'fail.txt';
        fi
    fi
done

【问题讨论】:

  • 您正在向 exiftool 发送目录,而不是文件。您需要一个全局变量:..Music/+++/*。删除-r - 它是递归的,对一次处理一个文件没有帮助。 exiftool 不支持写入 mp3(仅读取),所以无论如何你都需要这样做。
  • 感谢@dan 的回答,这一切都说得通。删除了递归 -r 并一直在修补 glob,似乎无法使其正常工作。我应该将它添加到我的 for 循环还是 exif 命令本身?在 for 循环中使用~/Music/+++/*,它会正确打印,但是当我在前面添加 .. 时会不断出错,或者尝试在输出上使用 exiftool。

标签: bash exif exiftool


【解决方案1】:

在@dan 的帮助下能够搞定这一切
现在可以搜索艺术家“Loosies”文件夹,如果不存在则创建一个。
然后将文件复制到那里。
最后检查文件是否确实存在并打印到失败/成功文本文件。

#!/usr/bin/env bash
for song in ~/Music/+++/*;
do
    artist=`exiftool -Artist "${song}"`;
    title=`exiftool -title "${song}"`;
    title=${title#*: } ;
    artist=${artist#*: } ;
    if [[ -d  ~/Music/Artists/"${artist}" ]] ;
    then
        if [[ -d  ~/Music/Artists/"${artist}"/Loosies ]] ; then
            cp  "${song}" ~/Music/Artists/"${artist}"/Loosies ;
        else
            mkdir -p ~/Music/Artists/"${artist}"/Loosies ;
            cp  "${song}" ~/Music/Artists/"${artist}"/Loosies ;
        fi
    else
        mkdir -p ~/Music/Artists/"${artist}"/Loosies ;
        cp "${song}" ~/Music/Artists/"${artist}"/Loosies ;
    fi
    song_=${song##*/}
    if [[ -f ~/Music/Artists/$artist/Loosies/$song_ ]] ; then
        exiftool "${song}" -Album -Artist -title >> ~/'success.txt';
        echo '---' >> ~/'success.txt';
    else
        exiftool "${song}" -Album -Artist -title >> ~/'fail.txt';
        echo '---' >> ~/'fail.txt';
    fi
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2012-07-11
    • 2013-12-01
    • 2010-11-05
    • 1970-01-01
    相关资源
    最近更新 更多