我有一个bash脚本,它不会产生我期望的结果。它旨在重命名文件夹结构中的文件,以便文件可以在文件夹结构之外排序。重命名文件夹名称中的文件引起的Bash脚本问题
文件结构从包含10-20张CD光盘的典型音频书中撕掉。最上面的文件夹是保存文件夹的每个盘,01,02标题的文件夹,03等
像这样:
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...
脚本使用的文件夹名称重命名这些文件看起来是这样的:
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时发生了一些奇怪的事情。我无法弄清楚它为什么会发生。
这里是一个run(rename_log.out)输出日志文件:
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以及它们是如何重新命名。我希望他们是01008 & 01009但他们不是。我错过了什么?
这里的任何帮助,非常感谢。
// Johan
从''man 1 bash'':“带有前导0的常量被解释为八进制数字。”我猜想从文件名匹配的字符串包括前导零。 例如''为我在{0..9}中;做printf“%d \ n”“0 $ {i}”;完成'' –
这是一个重复? http://stackoverflow.com/questions/8078167/bizarre-issue-with-printf-in-bash-script09-and-08-are-invalid-numbers-07 –