【发布时间】:2015-10-12 11:39:43
【问题描述】:
在一个文件夹中,我有几个文件,例如
name_1.txt
name_2.txt
name_12.txt
name_13.txt
我想将它们重命名为
name_1.txt -> name_1.txt
name_2.txt -> name_2.txt
name_12.txt -> name_3.txt
name_13.txt -> name_4.txt
以下代码完成了部分工作,但没有保持顺序
#!/bin/sh
num=1
for file in *.txt; do
mv "$file" "$(printf "%u" $num).txt"
let num=$num+1
done
确实是输出
name_1.txt -> 1.txt
name_2.txt -> 4.txt
name_12.txt -> 2.txt
name_13.txt -> 3.txt
如何固定名称和顺序?谢谢!
【问题讨论】:
-
您的
*.txt已按字母顺序排序。我想您可以按照上面显示的顺序在脚本中手动列出文件名,而不是 *.txt。一个重要的问题是,为什么你认为name_12.txt应该变成3.txt(假设你这样做)? -
name_2 应该在 name_1 之后和 name_13 之前,按字母顺序排序会给出错误的结果...
-
啊,我明白了。您正在查看 13,我被困在领先的 1 上。您希望对它进行有意义的排序,而不是按字母顺序。我认为
man ls页面可以根据需要进行排序,以构建文件列表(而不是 *.txt)。抱歉,我正在工作,使用的是 Windows 机器,无法为您查找详细信息。