使用bash脚本按标签排序MP3会移动目录而不是文件?

时间:2014-04-02 20:39:51

标签: bash sorting

我对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':权限被拒绝

1 个答案:

答案 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 …