*。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