【问题标题】:Sorting MP3s by tags with bash script moves directory instead of files?使用 bash 脚本按标签对 MP3 进行排序会移动目录而不是文件?
【发布时间】:2014-04-02 20:39:50
【问题描述】:

我对 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: unrecognized option '--.mp3' 即使这样,它似乎仍然移动了测试目录,而不是 mp3。

Edit2:好的,更多测试表明测试目录而不是其中的文件已被处理。我该如何解决?

Edit3:好的,我做了一些更改,并且制作了专辑目录,但是我得到了 mkdir 错误,它们在每个第一个之后每次都已经存在,我得到了

mkdir: 无法创建目录‘/home/user/ResultMP3s/Album0’: 文件存在

mkdir: 无法创建目录'/': 文件存在

mv: cannot stat ‘TestMP3s/song01.mp3’: No such file or directory

mv: 无法创建目录'/Album0': 权限被拒绝

【问题讨论】:

    标签: bash sorting


    【解决方案1】:

    似乎这些参数被设置为空字符串。

    $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 …
    

    【讨论】:

    • 我进行了一些编辑并尝试使用 mkdir,因为 mv 给出的目录不存在错误,但现在我收到了类似 mv: cannot stat 'TestMP3s/song89.mp3': No such file或目录 mv:无法创建目录“/Album8”:权限被拒绝
    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 2021-12-16
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    相关资源
    最近更新 更多