批次重新命名檔案名稱以刪除最後一個“ - ”之後的部分,忽略擴展名

批次重新命名檔案名稱以刪除最後一個“ - ”之後的部分,忽略擴展名

我想批量重命名某個資料夾中的文件,-按以下方式刪除最後一個之後的部分。

  • hello world - Mr Sheephello world
  • super user - question on super user.docxsuper user.docx
  • abc - def - ghi jkl.pdfabc - def.pdf

我更喜歡命令列解決方案,但其他選項也可以。

答案1

要像在 bash 中一樣刪除最後一個-使用,將刪除變數末尾的最短模式。欲了解更多信息,請閱讀${f% - *}${var%Pattern}參數替換。結果是這樣的

for f in path/*
do
    if [[ $f = *.* ]]; then ext=".${f##*.}"; else ext=""; fi
    echo mv "$f" "${f% - *}$ext"
done

驗證新檔案名稱正確後,您可以刪除echo以進行真正的重新命名。演示:

$ for f in "hello world - Mr Sheep" "super user - question on super user.docx" "abc - def - ghi jkl.pdf"; do if [[ $f = *.* ]]; then ext=".${f##*.}"; else ext=""; fi; echo mv "'$f'" "'${f% - *}$ext'";  done
mv 'hello world - Mr Sheep' 'hello world'
mv 'super user - question on super user.docx' 'super user.docx'
mv 'abc - def - ghi jkl.pdf' 'abc - def.pdf'

相關內容