删除目录中所有文件的文件名的最后 n 个字符

删除目录中所有文件的文件名的最后 n 个字符

如何通过终端删除某个目录中所有文件的文件名的最后 12 个字符?

答案1

使用bash参数扩展:

for i in ?????????????*; do echo mv -i "$i" "${i%????????????}"; done

删除echo以采取实际行动。检查多个源文件的输出文件名是否相同。

您也可以使用参数扩展替换模式:

for i in ?????????????*; do echo mv -i "$i" "${i/????????????}"; done

使用rename( prename),从该目录:

rename -n 's/.{12}$//' *

如果您只想对文件执行此操作,这将重命名所有文件和目录:

find . -maxdepth 1 -type f -name '?????????????*' -exec rename -n 's/.{12}$//' {} +

这将进行空运行,删除-n以进行实际操作:

find . -maxdepth 1 -type f -name '?????????????*' -exec rename 's/.{12}$//' {} +

这可能再次导致竞争条件,请确保仔细检查空运行的输出。

答案2

您可以使用rename。检查它是否已安装:

sudo apt install rename

从目录内部运行:

rename -n 's/(.*).{12}/$1/' *

测试后删除-n以真正重命名文件。替换{12}{whatever number of characters you want to delete from the end of the name}

解释:

  • s/old/new/' replacewith的新的`
  • (.*)保存任意数量的任意字符...
  • .{12}最后十二个字符,无论它们是什么
  • $1保存的字符()

答案3

bash可以使用Shell 参数扩展

单线

for filename in *; do newname=${filename:0:-12}; mv "$filename" "$newname"; done

多行带注释

#!/bin/bash

# Loop through all files in the directory
for filename in *; do

    # Remove the last 12 characters from the name
    newname=${filename:0:-12}

    # Rename the file by moving it
    mv "$filename" "$newname"

done

相关内容