我对bash知之甚少,但是我试图制作一个简单的脚本,根据专辑将MP3分类到子目录中,并根据曲目编号,专辑和艺术家重命名。我目前的代码似乎没有正确地重命名和移动文件,但我不确定我做错了什么。这是我使用朋友的提示制作的当前代码,该朋友希望我尝试使用bash进行处理:
mkdir $2
FILES="$1"/*
for f in $FILES
do
echo "Processing $f..."
ARTIST="`id3tool "$f" | grep '^Artist:' | awk '{ for (i=2;i<=NF;i++) { printf $i; printf " " } }'`"
ALBUM="`id3tool "$f" | grep '^Album:' | awk '{ for (i=2;i<=NF;i++) { printf $i; printf " " } }'`"
YEAR="`id3tool "$f" | grep '^Year:' | awk '{ for (i=2;i<=NF;i++) { printf $i; printf " " } }'`"
TRACKNUM="`id3tool "$f" | grep '^Track:' | awk '{ print $2 }'`"
mkdir $2/$ALBUM/
mv $f "$TRACKNUM-$ALBUM-$ARTIST.mp3"
mv $f $2/$ALBUM/
done
第一个参数是我用来测试它的MP3目录。第二个参数是我希望它们被移入的目录。当我运行它时,我将测试目录移动到目标目录中,并且没有任何文件被更改或放入子目录中。不应该是第一个mv更改名称,然后第二个将它们移动到我想要的位置吗?循环是选择目录而不是文件吗?
编辑:当我运行它时,我收到错误:mv:无法识别的选项&#39; - .mp3&#39;即便如此,它仍然似乎移动了测试目录,而不是mp3。
Edit2:好的,还有一些测试表明处理了测试目录而不是其中的文件。我该如何解决这个问题?
Edit3:好的,我做了一些更改,并且制作了专辑目录,但是我得到了mkdir错误,每次在第一次之后它们已经存在并且我得到了
mkdir:无法创建目录'/ home / user / ResultMP3s / Album0':文件存在
mkdir:无法创建目录'/':文件存在
mv:无法统计'TestMP3s / song01.mp3':没有这样的文件或目录
mv:无法创建目录'/ Album0':权限被拒绝
答案 0 :(得分:0)
似乎这些参数设置为空字符串。
$TRACKNUM-$ALBUM-$ARTIST.mp3 # -> --.mp3
mv $f $2/$ALBUM/ # -> mv $f $2// (if $f is a directory, this will move $f inside $2)
这可能是由for
循环引起的。如果$f
是一个目录,也许你想要
for f in "$1"/*; do …