Markus Gratis Asked: 2017-01-19 21:03:40 +0800 CST2017-01-19 21:03:40 +0800 CST 2017-01-19 21:03:40 +0800 CST 删除目录中所有文件的文件名的最后 n 个字符 772 如何通过终端删除某个目录中所有文件文件名的最后 12 个字符? command-line 2 个回答 Voted Best Answer heemayl 2017-01-19T21:09:17+08:002017-01-19T21:09:17+08:00 使用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}$//' {} + 同样,这可能会导致竞态条件,请确保仔细检查空运行的输出。 Zanna 2017-01-19T21:07:33+08:002017-01-19T21:07:33+08:00 你可以使用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保存的字符()
使用
bash
参数扩展:删除
echo
以进行实际操作。检查多个源文件的相同输出文件名。您也可以使用参数扩展替换模式:
使用
rename
(prename
),从该目录:如果您只想对文件执行此操作,这将重命名所有文件和目录:
这将进行空运行,删除
-n
以进行实际操作:同样,这可能会导致竞态条件,请确保仔细检查空运行的输出。
你可以使用
rename
. 从目录内部:测试后删除
-n
以实际重命名文件。替换{12}
为{whatever number of characters you want to delete from the end of the name}
解释
s/old/new/' replace
旧新with
`(.*)
保存任意数量的任意字符....{12}
最后十二个字符,无论它们是什么$1
保存的字符()