Bash

如何更改多個文件的副檔名?

  • February 10, 2022

我想將文件副檔名從 更改*.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

引用自:https://unix.stackexchange.com/questions/19654