我有一个bash脚本,不会产生我期望的结果。它旨在重命名文件夹结构中的文件,使文件可以在文件夹结构之外进行排序。
从包含10-20张CD光盘的典型音频书中翻录文件结构。最上面的文件夹是一个Title文件夹,其中包含每个光盘的文件夹,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 "$@"
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但他们不是。我错过了什么?
非常感谢任何帮助。
//约翰
答案 0 :(得分:2)
重新格式化并修复。
cd "$@"
pwd
IFS=$'\n'
for f in $(find "$PWD" -name '*.wav'); do
folder=${f%/*}
file=${f##*/}
echo ${folder##*/}"/"$file "-->" ${folder##*/}$(printf %03d "$(( 10#${file%% *} ))") ${file#* } >> rename_log.out
mv "$f" "$folder/${folder##*/}$(printf %03d "$(( 10#${file%% *} ))") ${file#* }"
done
注意八进制到十进制转换添加到传递给printf的变量。