bash
シェルには、変数名をすべて大文字に変換するための構文があります。
for file in * ; do # or *.jpg, or x*.jpg, or whatever
mv "$file" "${file^^}"
done
この機能は bash バージョン 4.0 で導入されたので、最初に bash
のバージョンを確認してください。 実装します。 mv
を差し替えて一度試してみてください。 echo mv
まで 、それがあなたが望むことをすることを確認するためだけです.
この機能のドキュメントはこちら、または info bash
と入力してください 「upper」を検索してください。
おそらく、ターゲット ファイルが既に存在する場合の対処方法を決定する必要があります (たとえば、両方の x00000.jpg
の場合)。 と X00000.JPG
既に存在します)、それが問題ではないことが確実でない限り。このような名前の競合を検出するには、以下を試してください:
ls *.txt | tr '[a-z]' '[A-Z]' | sort | uniq -c | sort -n
1
で始まらない行を探します .
rename
おそらく、複数のファイルの名前を変更する最も簡単な方法は、Perl の rename
を使用することです。 .小文字の名前を大文字に変換するには:
rename 'y/a-z/A-Z/' *
ファイルがサブディレクトリにもある場合は、globstar または find
を使用できます :
find . -maxdepth 1 -type f -iname "*.jpg" -execdir rename "y/a-z/A-Z/" {} +
参考文献
- ハウツー:Linux がシェル プロンプトで複数のファイルの名前を変更する – nixCraft
y/
に関する詳細情報 、s の代わりに翻訳 代用。- DistroTube - Linux でファイルの名前を変更するためのツール
for f in * ; do mv -- "$f" "$(tr [:lower:] [:upper:] <<< "$f")" ; done
Bash にはファイルの名前を変更するための組み込みコマンドがないため、Bash からのみファイルの名前を変更することはできません。そのためには、少なくとも 1 つの外部コマンドを使用する必要があります。
Perl が許可されている場合:
perl -e 'for(@ARGV){rename$_,uc}' *.jpg
Python が許可されている場合:
python -c 'import os, sys; [os.rename(a, a.upper()) for a in sys.argv[1:]]' *.jpg
数千以上のファイルがある場合、上記のソリューションは高速ですが、以下のソリューションは著しく遅くなります。
AWK の場合、ls
と mv
許可されています:
# Insecure if the filenames contain an apostrophe or newline!
eval "$(ls -- *.jpg | awk '{print"mv -- \x27"$0"\x27 \x27"toupper($0)"\x27"}')"
*.jpg
のため、ファイルがたくさんある場合、上記の解決策は機能しません。 展開すると引数リストが長すぎます (エラー:引数リストが長すぎます ).
tr
の場合 と mv
許可されている場合は、damienfrancois の回答を参照してください。
mv
の場合 許可されています:
for file in *; do mv -- "$file" "${file^^}"; done
これらは .jpg
の名前を変更することに注意してください .JPG
まで