Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 重命名目录中的所有文件,将部分文件名增加1_Linux_Bash_Rename - Fatal编程技术网

Linux 重命名目录中的所有文件,将部分文件名增加1

Linux 重命名目录中的所有文件,将部分文件名增加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

我想用特定的命名约定重命名文件

所有文件均命名为[letter][letter][6位数字].txt

所需的重命名模式

aa006793.txt->aa006893.txt


有人能帮忙吗?

您需要为此制作自己的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中是哑的。