我想使用 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 之外,我不知道我正在使用的任何版本。
答案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
,請將其刪除以實際執行命令。