2011-02-13 6 views
2

나는 내 음악 폴더를 고치려고합니다.하위 폴더 이름 바꾸기

그래서 내가 필요한 것은에서 파일을 이동하는 스크립트입니다 - title.mp3

newmusic \ 앨범 이름 \ 아티스트로 파일을 이동 앨범 이름 \ 아티스트 \

음악 \ 아티스트 - title.mp3.

아래 라인을 시도했지만 작동하지 않았습니다. 새로운 = "newmusic/$에 있어야

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}"' {} \;

는/{{DIRS 2,3 -f '/'-d 잘라}}은"2,3 -f -d '/'컷 '하는가 ? 사람이

+0

유닉스 폴더가없는 :와

대신 재생할 수 있습니다. – tchrist

+0

[Super User] (http://superuser.com/)와 비슷한 모양입니다. –

답변

2

내가 여기서 뭔가를 놓치고 .. 사전에 감사를 도울 수있다, 또는 mv 당신이 당신의 질문을 바탕으로 원하는 것을 달성 할 수없는,이 작업을해야 님의

mv music/*/* newmusic/ 
+0

"-bash :/bin/mv : 인수 목록이 너무 깁니다." mv 명령을 사용하는 경우 2 하위 폴더 (아티스트)가 삭제되지 않습니까? – dacool

0

1. cd 당신의 작업 디렉토리

2. find music/Artist -type d -maxdepth 0 -exec mv {} newmusic/ \; 트릭을해야합니다.

mv을 원하지 않으면 mv를 cp -r으로 바꿀 수 있습니다.

+0

아티스트가 속성을 변경하면 많은 아티스트가 변경되므로 모두 입력 할 수 없습니다. Theres는 음악/아티스트 \/x /와 같은 일부 폴더 이름 사이에도 공백이 있습니다. 우리는 명령 앞에 필요하지만, 어떻게 든 폴더 이름에 공백이 생길 때 줄을 어지럽 힙니다. ls -1을 사용할 때도 이와 같이 : for $ in (ls -1 music); 음악 찾기/$ f 타입 d -maxdepth 0 -exec echo {} newmusic/\; 완료 – dacool

+0

find * -type d -mindepth 1 -exec cp -r {} ../newmusic/ \; 근무, 올바른 경로를 보여 주셔서 고마워 :) – dacool

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