我想使用 Bash 重命名我的文件,删除中间的 4 个字符。
原始文件名:
dwe_hiul123456.pdf
dwe_lkyd345876.pdf
dwe_ythn157843.pdf
我想删除中间的 4 个字母,这样新文件名将是:
dwe_123456.pdf
dwe_345876.pdf
dwe_157843.pdf
4 个字母始终跟在 后面,并且文件名中_
始终有 1 个字母。_
所有文件名的长度都相同,我要删除的四个字符位于同一位置。
我对此真的很陌生,除了使用 Windows 10 之外,我不知道我正在使用什么版本。我试图通过 Git Bash 命令窗口来执行此操作。
答案1
rename
如果您有 perl-rename (在基于 Debian 的系统或其他系统上可用perl-rename
),您可以执行以下操作:
$ rename -n 's/_..../_/' *pdf
dwe_hiul123456.pdf -> dwe_123456.pdf
dwe_lkyd345876.pdf -> dwe_345876.pdf
dwe_ythn157843.pdf -> dwe_157843.pdf
导致仅打印它将执行的操作而不进行任何更改-n
。rename
一旦您确认它按您想要的方式工作,请删除-n
并再次运行命令以实际重命名文件:
rename 's/_..../_/' *pdf
如果由于某种原因无法使用rename
,也可以使用简单的 shell 循环来完成:
for file in *pdf; do
echo mv -- "$file" "${file/_????/_}"
done
再次,如果您确信这能达到您想要的效果,请删除 来echo
实际重命名命令:
for file in *pdf; do
mv -- "$file" "${file/_????/_}"
done
答案2
使用参数扩展:
$ for i in *.pdf; do
echo mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
# actual `mv` command
# mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
done
mv -- dwe_hiul123456.pdf dwe_123456.pdf
mv -- dwe_lkyd345876.pdf dwe_345876.pdf
mv -- dwe_ythn157843.pdf dwe_157843.pdf
如果您对结果满意echo
,请将其删除以实际执行命令。