예상 한 결과를 생성하지 못하는 bash 스크립트가 있습니다. 파일이 폴더 구조 외부에서 정렬 될 수 있도록 폴더 구조의 파일 이름을 바꿉니다.폴더 이름에서 파일 이름을 바꾸는 Bash 스크립트 문제
파일 구조는 10-20 개의 CD 디스크가 들어있는 일반적인 오디오 북에서 추출됩니다.
TITLE/01/File 01.wav,File 02.wav etc.
02/File 01.wav,File 02.wav etc.
03/File 01.wav,File 02.wav etc.
etc...
스크립트 폴더 이름을 사용하여 파일의 이름을 바꿀 수는 다음과 같습니다 : 최상위 폴더는 02, 01, 각 디스크의 폴더를 보유 제목 폴더, 이와 같이 03 등
입니다
cd "[email protected]"
pwd
IFS=$'\n'; for f in $(find "$PWD" -name '*.wav'); do folder=${f%/*}; file=${f##*/}; echo ${folder##*/}"/"$file "-->" ${folder##*/}$(printf %03d "${file%% *}") ${file#* } >> rename_log.out; mv "$f" "$folder/${folder##*/}$(printf %03d "${file%% *}") ${file#* }";done
문제는 파일 08과 09의 이름을 바꿀 때 이상한 일이 발생한다는 것입니다. 왜 그런 일이 발생하는지 알 수 없습니다.
01/01 - Track 01.wav --> 01001 - Track 01.wav
01/02 - Track 02.wav --> 01002 - Track 02.wav
01/03 - Track 03.wav --> 01003 - Track 03.wav
01/04 - Track 04.wav --> 01004 - Track 04.wav
01/05 - Track 05.wav --> 01005 - Track 05.wav
01/06 - Track 06.wav --> 01006 - Track 06.wav
01/07 - Track 07.wav --> 01007 - Track 07.wav
01/08 - Track 08.wav --> 01000 - Track 08.wav
01/09 - Track 09.wav --> 01000 - Track 09.wav
01/10 - Track 10.wav --> 01010 - Track 10.wav
01/11 - Track 11.wav --> 01011 - Track 11.wav
01/12 - Track 12.wav --> 01012 - Track 12.wav
01/13 - Track 13.wav --> 01013 - Track 13.wav
01/14 - Track 14.wav --> 01014 - Track 14.wav
01/15 - Track 15.wav --> 01015 - Track 15.wav
01/16 - Track 16.wav --> 01016 - Track 16.wav
공지 트랙 8 & 9 그들이 어떻게 이름이 변경됩니다 여기
는 실행 (rename_log.out)의 출력 로그 파일입니다. 나는 그들에게 01008 & 01009가 될 것이라고 기대하지만 그들은 그렇지 않다. 나는 무엇을 놓치고 있는가 ???여기에 도움을 주시면 감사하겠습니다.
// 요한
''man 1 bash'' : "0을 선두로하는 상수는 8 진수로 해석됩니다."파일 이름과 일치하는 문자열에는 앞에 오는 0이 포함됩니다. 예. ''나는 {0..9}에 속해있다. do printf "% d \ n" "0 $ {i}"; done'' –
이것의 dup? http://stackoverflow.com/questions/8078167/bizarre-issue-with-printf-in-bash-script09-and-08-are-invalid-numbers-07 –