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

Mar*_*tis 5 command-line batch-rename

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

hee*_*ayl 8

使用bash参数扩展:

for i in ?????????????*; do echo mv -i "$i" "${i%????????????}"; done
Run Code Online (Sandbox Code Playgroud)

删除echo以进行实际操作。检查多个源文件的相同输出文件名。

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

for i in ?????????????*; do echo mv -i "$i" "${i/????????????}"; done
Run Code Online (Sandbox Code Playgroud)

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

rename -n 's/.{12}$//' *
Run Code Online (Sandbox Code Playgroud)

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

find . -maxdepth 1 -type f -name '?????????????*' -exec rename -n 's/.{12}$//' {} +
Run Code Online (Sandbox Code Playgroud)

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

find . -maxdepth 1 -type f -name '?????????????*' -exec rename 's/.{12}$//' {} +
Run Code Online (Sandbox Code Playgroud)

同样,这可能会导致竞争条件,请确保仔细检查干运行的输出。


Zan*_*nna 6

你可以使用rename. 检查是否已安装:

sudo apt install rename
Run Code Online (Sandbox Code Playgroud)

从目录内部运行:

rename -n 's/(.*).{12}/$1/' *
Run Code Online (Sandbox Code Playgroud)

测试后删除-n以实际重命名文件。{12}用。。。来代替{whatever number of characters you want to delete from the end of the name}

解释:

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