2011-02-13 225 views
2

我試圖修復我的音樂文件夾,它搞砸了什麼。重命名子文件夾

所以我需要的是腳本從移動文件:

音樂\藝術家\專輯名稱\藝術家 - 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}"' {} \;

難道 「禁-d '/' -f 2,3」 應該是在新=「newmusic/$ {{}迪爾斯切-d '/' -f 2,3}/? 誰能幫助在此先感謝..

+0

的Unix沒有文件夾。 – tchrist 2011-02-13 16:06:21

+0

這聽起來更像是[超級用戶](http://superuser.com/)。 – 2011-02-13 16:43:04

回答

2

我失去了一些東西在這裏,也可以不mv實現你想要的根據您的問題,這應該工作:

mv music/*/* newmusic/ 
+0

「-bash:/ bin/mv:參數列表太長。」 如果只是使用mv命令,它不會關閉2個子文件夾(藝術家)? – dacool 2011-02-13 15:50:40

0

1. cd您工作目錄

2. find music/Artist -type d -maxdepth 0 -exec mv {} newmusic/ \;應該訣竅。

如果你不想mv那麼你可以用cp -r替換mv。

1
for artist in music/*; do 
    if [[ -d "$artist" ]]; then 
    for album in $artist/*; do 
     mv "$album/*" "newmusic/${album##*/}/" 
    done 
    fi 
done 
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