ファイル拡張子をからに変更したいと*.txt
思います*.text
。basename
コマンドを実行しましたが、複数のファイルの変更に問題があります。
これは私のコードです。
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