如何从命令行顺序重命名多个文件?

kam*_*z85 15 command-line batch-rename

如何重命名文件如下

AS1100801000002.RAW7AGS 
AS1100801001008.RAW7AH4
AS1100801002001.RAW7AH9
AS1100801003002.RAW7AHE
AS1100801004009.RAW7AHT
AS1100801005002.RAW7AHY
AS1100801010002.RAW7AJ3
Run Code Online (Sandbox Code Playgroud)

到新名字

AS1.txt
AS2.txt
AS3.txt
AS4.txt
AS5.txt
AS6.txt
AS7.txt
Run Code Online (Sandbox Code Playgroud)

Oli*_*Oli 24

renameUbuntu 附带的工具在这类东西上非常受欢迎。你可以像这样嵌入小的 Perl 表达式:

rename -n 's/.+/our $i; sprintf("AS%d.txt", 1+$i++)/e' *
Run Code Online (Sandbox Code Playgroud)

那只会告诉你它会做什么。删除-n使其成为实弹演习。

这基本上是通过粗略定义一个变量并在我们点击的每个文件中递增它来工作的。如果您要拥有 10 个以上的文件,我建议在sprintf. 以下是最好的999

rename -n 's/.+/our $i; sprintf("AS%03d.txt", 1+$i++)/e' *
Run Code Online (Sandbox Code Playgroud)

...但这很容易扩展。


Pau*_*aul 4

我不知道有哪个命令或实用程序可以做到这一点,但使用一个简单的循环就很容易做到:

N=1
for X in AS*RAW*; do
  mv $X AS$N.txt
  N=$(($N+1))
done
Run Code Online (Sandbox Code Playgroud)


edw*_*win 0

假设您要重命名的文件位于 中~/Adir,并且这些文件是该文件夹中唯一的文件,则:

n=0
for f in $( ls ~/Adir | sort ) ; do
    n=$(( n+1 ))
    mv -n "$f" "AS${n}.txt"
done
Run Code Online (Sandbox Code Playgroud)

该脚本将查看其中的每个文件~/Adir,如果该文件不存在,则将其重命名为AS1.txt, AS2.txt, ...(不会有任何覆盖)。这就是为什么您应该确保这些是~/Adir. 该sort命令只是为了防止您希望文件保持初始顺序。