Shell 从文件名中删除数字

Shell 从文件名中删除数字,shell,unix,Shell,Unix,我有一堆这样的文件名: a-1.001.txt a-2.234.txt a-3.765.txt 等等。我希望他们: a-1.txt a-2.txt a-3.txt 这都是在unix中实现的。我一直在尝试“重命名”,但我无法让它与正则表达式一起工作。(我读过有两个版本,我可能有另一个) 假设您知道如何创建循环来迭代所有文件名(或者您将手动执行此操作),并且每个文件的名称都存储在文件中: mv $FILE ${FILE%%.*}.txt ${parameter%%pattern}习惯用法用于删

我有一堆这样的文件名:

a-1.001.txt
a-2.234.txt
a-3.765.txt
等等。我希望他们:

a-1.txt
a-2.txt
a-3.txt

这都是在unix中实现的。我一直在尝试“重命名”,但我无法让它与正则表达式一起工作。(我读过有两个版本,我可能有另一个)

假设您知道如何创建循环来迭代所有文件名(或者您将手动执行此操作),并且每个文件的名称都存储在
文件中

mv $FILE ${FILE%%.*}.txt
${parameter%%pattern}
习惯用法用于删除匹配模式的最长后缀

对于测试,将
mv
更改为
echo


PS:代码是从我的头脑中产生的,但应该可以工作。=)

如果
a-1.001.txt
a-1.002.txt
存在于同一目录中,会发生什么情况?@pilcrow不会发生这种情况。我放了一个1,但它们是日期,每个日期都有一个文件
完成之前
。如果要将
i
的内容通过管道传输到
awk
,则应
echo
它,因为命令
$i
没有任何意义。您忘记将
.txt
附加到文件名。此外,您还需要使用
$(ls)
而不是
ls
,或者更好的方法是使用
$(find.-maxdepth 1-typef-regex.*.txt”)
;-)
for i in $(ls) ; do   mv $i $(echo $i | awk -F '.' '{print $1"."$3}'); done