如何在每个文件名中删除一些字符串

如何在每个文件名中删除一些字符串

[root@localhost ~]# ls *.bak

test2.bak test3.bak test9.bak test.bak test.txt.bak

如何删除.bak所有文件中的所有内容?这是我当前的尝试

ls *.bak|xargs -t -i mv {}.bak {}

但这对我不起作用。这里有什么解决方法吗?

答案1

循环应该执行以下操作(在类似 POSIX 的 shell 中):

for f in *.bak; do 
    mv -- "$f" "${f%.*}"
done

一行:

for f in *.bak; do mv -- "$f" "${f%.*}"; done

答案2

使用rename命令:

rename 's/\.bak$//' *.bak

  • 's/\.bak$//'-珀尔表达式匹配以结尾的所有文件名.bak并去除扩展名

答案3

应该适用于所有平台的东西:

for i in *.bak
do
  mv $i `echo $i | sed 's/\.bak$//'`
done

答案4

#!/bin/bash
for val in \`ls *.bat`
do
    mv $val `echo $val | cut -f1 -d'.'`
done

相关内容