複数のファイルの拡張子を変更するには?

複数のファイルの拡張子を変更するには?

ファイル拡張子をからに変更したいと*.txt思います*.textbasenameコマンドを実行しましたが、複数のファイルの変更に問題があります。

これは私のコードです。

files=`ls -1 *.txt`

for x in $files
do
    mv $x "`basename $files .txt`.text"
done

次のエラーが発生します。

basename:引数が多すぎます。詳細については、basename --help 'を試してください。

ベストアンサー1

直接グレッグのウィキ:

# Rename all *.txt to *.text
for file in *.txt; do
    mv -- "$file" "${file%.txt}.text"
done

*.txtはいワイルドカードパターン*任意の文字列と一致させるためにワイルドカードとして使用されます。*.txt「.txt」で終わるすべてのファイル名と一致します。

-- オプションリストの終わりを表示。これにより、ハイフンで始まるファイル名に関する問題を回避できます。

${file%.txt}はいパラメータ拡張、最後に削除された変数の値に置き換えられますfile.txt

理由に関するトピックも参照してください。解析しないでくださいls

を使用する必要がある場合、basename構文は次のとおりです。

for file in *.txt; do
    mv -- "$file" "$(basename -- "$file" .txt).text"
done

おすすめ記事