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