【发布时间】: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。