Bash
如何更改多個文件的副檔名?
我想將文件副檔名從 更改
*.txt
為*.text
. 我嘗試使用該basename
命令,但在更改多個文件時遇到問題。這是我的程式碼:
files=`ls -1 *.txt` for x in $files do mv $x "`basename $files .txt`.text" done
我收到此錯誤:
basename: too many arguments Try basename --help' for more information
直接來自Greg 的 Wiki:
# Rename all *.txt to *.text for f in *.txt; do mv -- "$f" "${f%.txt}.text" done
*.txt
是一個萬用字元模式,*
用作萬用字元來匹配任何字元串。*.txt
匹配所有以“.txt”結尾的文件名。
--
標記選項列表的結尾。這避免了以連字元開頭的文件名的問題。
${f%.txt}
是一個參數擴展,替換為從末尾移除的f
變數的值。.txt
另請參閱有關為什麼不應該解析
ls
的條目。如果您必須使用
basename
,您的語法將是:for f in *.txt; do mv -- "$f" "$(basename -- "$f" .txt).text" done