*。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
承認された回答:
グレッグのウィキから直接:
# 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