循环访问顺序访问 exifdata 的歌曲
Posted
技术标签:
【中文标题】循环访问顺序访问 exifdata 的歌曲【英文标题】:loop over songs accessing exifdata sequentially 【发布时间】: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。
【参考方案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
【讨论】:
以上是关于循环访问顺序访问 exifdata 的歌曲的主要内容,如果未能解决你的问题,请参考以下文章