使用递增的数字重命名文件夹中的所有文件

6
我有一个文件夹,里面有10-15个任意命名的文件。文件名中可能包含空格。例如:wWw.page.com __ (576)_002。在终端中,当我按下w然后按下tab时,文件名会显示为:wWw.page.com\ \ __\ \(576\)_0.txt
我想要一个脚本来将所有文件重命名为0.txt1.txt2.txt等等。
我的问题是:wWw.page.com __ (576)_002.txt 文件未找到
index=0;
for i in $(ls *.txt)
do
    cp "${i}"  $index".txt" 
done

1
perl -e'rename $_, $i++.q(.txt) while(<*.txt>)' - jfs
1个回答

14

不要使用ls命令,尝试使用glob命令:

index=0;
for name in *.txt
do
    cp "${name}" "${index}.txt"
    index=$((index+1))
done

你不需要内部的 $ (index=$((index+1)))。 - Michael Krelin - hacker
1
没错,这是为什么它有效的原因:在命令替换中,Bash将根据IFS分解命令输出 - 但在通配符中不会这样。 - fge
@MichaelKrelin-hacker 我很少写脚本。有更好的方法来增加索引吗? - cnicutar
@cnicutar,首先,就像我在括号里说的那样。或者,你可以直接执行((++index)) - Michael Krelin - hacker
还应该注意,cp 命令会在文件夹中保留原始文件,而 mv 命令则不会。 - YemSalat
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接