Linux 重命名目录中的所有文件,将部分文件名增加1
我想用特定的命名约定重命名文件 所有文件均命名为[letter][letter][6位数字].txt 所需的重命名模式 aa006793.txt->aa006893.txtLinux 重命名目录中的所有文件,将部分文件名增加1,linux,bash,rename,Linux,Bash,Rename,我想用特定的命名约定重命名文件 所有文件均命名为[letter][letter][6位数字].txt 所需的重命名模式 aa006793.txt->aa006893.txt 有人能帮忙吗?您需要为此制作自己的shell脚本 在此情况下,请执行以下步骤 1) 准备该目录中的文件列表 2) 对该列表中的每个文件运行循环,然后处理其文件名并将其numbrec值增加1,然后使用mv命令替换该文件 祝您一切顺利…rename.sh #!/bin/bash for fname in $(ls * | gr
有人能帮忙吗?您需要为此制作自己的shell脚本 在此情况下,请执行以下步骤 1) 准备该目录中的文件列表 2) 对该列表中的每个文件运行循环,然后处理其文件名并将其numbrec值增加1,然后使用mv命令替换该文件
祝您一切顺利…rename.sh
#!/bin/bash
for fname in $(ls * | grep -E '^([a-zA-Z]){2}([0-9]){6}.txt$');
do
prefix=${fname:0:2};
prev_nbr=${fname:2:6};
curr_nbr=$(expr $prev_nbr + 100);
new_name=$(printf "%s%06d.txt\n" $prefix $curr_nbr);
mv "$fname" "$new_name";
done;
输出
$ touch aa006793.txt ab006794.txt
$ ls
aa006793.txt ab006794.txt rename.sh
$ ./rename.sh
$ ls
aa006893.txt ab006894.txt rename.sh
所有的文件都命名为[a-z][a-z]######.txt吗?@amdixon,是的files@John1024它在2小时内被移除。amdixon,非常感谢!请(而且
ls*
真的很蠢)。另外,不要在Bash脚本中使用$(expr…
:shell包含很多或算术功能!用户已确认所有文件均以特定方式命名,不包含空格或其他可能导致解析ls输出问题的字符。在这种情况下,解析ls outputNo很好!查看您正在使用的命令:ls*
。上帝您正在使用ls*
!然后使用grep
进行过滤。如果文件太多,超过了参数的最大数量,ls*
将中断。此外,OP说,他想考虑的所有文件都遵循这个约定,但是他没有对文件夹中的所有文件进行任何说明。此外,<代码> $(EXPR…)<代码>和<代码> $(PrTrF…)/代码>在BASH中是哑的。