重命名子文件夹

时间:2011-02-13 15:14:05

标签: linux bash find cut

我尝试修复我的音乐文件夹,itunes搞砸了。

所以我需要的是从以下位置移动文件的脚本:

music \ Artist \专辑名称\艺术家 - title.mp3

将文件移至

newmusic \专辑名称\艺术家 - title.mp3。

我尝试了以下这一行,但没有奏效。

find music -type f -exec bash -c 'ext="${0##*.}"; base="$(basename "$0" ."${ext}")"; dirs="$(dirname "$0" | cut -d '/' -f 2,3)"; new="newmusic/${dirs}/${base}.${ext}"; cp "$0" "${new}"' {} \;

“cut -d”/' - f 2,3“是否应该在new =”newmusic / $ {{dirs} cut -d'/'-f 2,3} / 有人可以帮忙吗?提前谢谢..

4 个答案:

答案 0 :(得分:2)

我在这里遗漏了什么,或者mv无法达到你想要的效果吗?根据您的问题,这应该有效:

mv music/*/* newmusic/

答案 1 :(得分:1)

for artist in music/*; do
  if [[ -d "$artist" ]]; then
    for album in $artist/*; do
      mv "$album/*" "newmusic/${album##*/}/"
    done
  fi
done

答案 2 :(得分:1)

欺骗,只要避免'-exec bash -c',你最终会得到不可更改的过度引用保护代码。

取而代之的是:

find -name .mp3 | while read file
do
    # Play with "$file"
    # Don't play with $file without doubles quotes, keep spaces in mind
    # Don't play with '$file', it'a common error ^^
done

答案 3 :(得分:0)

1. cd到您的工作目录

2. find music/Artist -type d -maxdepth 0 -exec mv {} newmusic/ \;应该做到这一点。

如果您不想mv,则可以用cp -r替换mv。