Linux shell脚本将前导零添加到文件名

Dav*_*ill 55 linux bash shell grep

我有一个大约1,700个文件的文件夹.它们都被命名为1.txt1497.txt等.我想重命名所有文件,以便所有文件名都是四位数.

即,23.txt成为0023.txt.

什么是shell脚本才能执行此操作?或者一个相关的问题:我如何使用grep只匹配包含的行\d.txt(即一个数字,然后一个句点,然后是字母txt)?

这是我到目前为止所拥有的:

for a in [command i need help with]
do
  mv $a 000$a
done
Run Code Online (Sandbox Code Playgroud)

基本上,运行三次,使用命令找到一位数,两位数和三位数文件名(初始零的数量已更改).

Col*_*ert 50

尝试:

for a in [0-9]*.txt; do
    mv $a `printf %04d.%s ${a%.*} ${a##*.}`
done
Run Code Online (Sandbox Code Playgroud)

[0-9]*.txt根据需要更改文件名模式().


通用枚举重命名,不对初始文件名集做出任何假设:

X=1;
for i in *.txt; do
  mv $i $(printf %04d.%s ${X%.*} ${i##*.})
  let X="$X+1"
done
Run Code Online (Sandbox Code Playgroud)

在同一主题上:


Pau*_*ce. 15

使用有时与Perl一起安装的rename(prename在某些情况下)脚本,您可以使用Perl表达式进行重命名.如果存在名称冲突,脚本将跳过重命名.

以下命令仅重命名具有四位或更少位数后跟".txt"扩展名的文件.它不会重命名不严格符合该模式的文件.它不会截断包含四位以上数字的名称.

rename 'unless (/0+[0-9]{4}.txt/) {s/^([0-9]{1,3}\.txt)$/000$1/g;s/0*([0-9]{4}\..*)/$1/}' *
Run Code Online (Sandbox Code Playgroud)

几个例子:

Original    Becomes
1.txt       0001.txt
02.txt      0002.txt
123.txt     0123.txt
00000.txt   00000.txt
1.23.txt    1.23.txt
Run Code Online (Sandbox Code Playgroud)

到目前为止给出的其他答案将尝试重命名不符合模式的文件,为包含非数字字符的文件名产生错误,执行产生名称冲突的重命名,尝试重命名名称中包含空格的文件,可能还有其他问题

  • @Chris:我的答案经常做两件事.一,他们试图回答OP的问题.第二,他们试图提供可能对未来的问题观众有用的其他信息. (15认同)
  • @Dennis:感谢你提供这个,最高评价的答案并没有解决我的特定问题,但正如你所说,你提供了一个更广泛和更广泛的答案,这有帮助.谢谢. (2认同)

Chr*_*ung 12

for a in *.txt; do
  b=$(printf %04d.txt ${a%.txt})
  if [ $a != $b ]; then
    mv $a $b
  fi
done
Run Code Online (Sandbox Code Playgroud)


rkh*_*rov 9

一内胆:

ls | awk '/^([0-9]+)\.txt$/ { printf("%s %04d.txt\n", $0, $1) }' | xargs -n2 mv
Run Code Online (Sandbox Code Playgroud)

如何使用grep仅匹配包含\ d.txt的行(IE 1位数,然后是句点,然后是字母txt)?

grep -E '^[0-9]\.txt$'
Run Code Online (Sandbox Code Playgroud)


sin*_*ner 6

假设您的文件夹中有数据类型为 .dat 的文件。只需将此代码复制到名为 run.sh 的文件中,通过运行使其可执行chmode +x run.sh,然后使用以下命令执行./run.sh

#!/bin/bash
num=0
for i in *.dat
do

  a=`printf "%05d" $num`
  mv "$i" "filename_$a.dat"
  let "num = $(($num + 1))"
done
Run Code Online (Sandbox Code Playgroud)

这会将文件夹中的所有文件转换为filename_00000.datfilename_00001.dat等。