如何通过终端删除某个目录中所有文件的文件名的最后 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/' replace
旧with
的新的`(.*)
保存任意数量的任意字符....{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