ファイル名の大文字を小文字に変更するには?

ファイル名の大文字を小文字に変更するには?

ディレクトリ内のファイル名の大文字を小文字に変更するコマンドは何ですか?ありがとう

ファイルがあります

F1
F2
FILE1
FILE2

名前を変更したいです。

f1
f2
file1
file2

答え1

現在のディレクトリ内のすべての(隠されていない)ファイルについて

zshシェルでは、次のことができます。

autoload zmv # best in ~/.zshrc
zmv '*' '${(L)f}'

zmv名前を変更する前にクラッシュ(現在のディレクトリのファイルやファイルなど)がある場合は中断しますFILEFile

(ディレクトリ以外のファイルのみを名前変更するように*変更するか、シンボリックリンクを確認した後にディレクトリ以外のファイルの名前を変更するように変更)*(#q^/)*(#q-^/)

そしてmmv

mmv '*' '#l1'

(このオプションを渡さmmvないと、ディレクトリ(ディレクトリへのシンボリックリンクでもない)の名前は変更されません。)-r

Perlのrenameユーティリティまたはそのバリエーション(時々と呼ばれるprename)を使用してください。

rename '$_ = lc $_' ./*

zmvmmv()の一部の変形はオプションでrename可能です。-n試運転そして-v 言葉が多い実行中のアクションを表示するオプション。

一部のバリアントはrenameASCII文字のみを翻訳します。たとえば、他のものはmmvロケールに関係なく入力をUTF-8として扱います。zmv他の方法と同様に、ロケールに従って正しく翻訳されます。

bashシェルから:

for f in *[[:upper:]]*; do
  # [ -f "$f" ] || continue # uncomment to skip non-regular files if needed
  # [ -L "$f" ] && continue # uncomment to also skip symlinks even
                            # if they resolve to regular files
  mv -i -- "$f" "${f,,}"
done

-iファイルを上書きする前に要求しましたが、名前を変更するたびに一部のmv実装でサポートされています。-v 言葉が多い実行中のアクションを表示するオプション。 GNU実装には-Tオプションがありますが、ここでも使用したいオプションがありますmv FOO fooFOOをfooディレクトリに移動します。foo現在のディレクトリにディレクトリがある場合)。

kshinzshとシェルbash

typeset -l f
for F in *[[:upper:]]*; do
  # [ -f "$f" ] || continue # uncomment to skip non-regular files if needed
  # [ -L "$f" ] && continue # uncomment to also skip symlinks even
                            # if they resolve to regular files
  f=$F
  mv -i -- "$F" "$f"
done

pdkshデリバティブはASCII文字のみ翻訳しますが)

POSIXly(ファイル名が改行文字で終わらないと仮定):

tolower() {
  awk 'BEGIN{print tolower(ARGV[1])}' "$1"
}
for f in *[[:upper:]]*; do
  # [ -f "$f" ] || continue # uncomment to skip non-regular files if needed
  # [ -L "$f" ] && continue # uncomment to also skip symlinks even
                            # if they resolve to regular files
  mv -i -- "$f" "$(tolower "$f")"
done

一部のawk実装では、mawkASCII文字のみを変換します。

再帰(サブディレクトリのファイル名も変更)

(やるべきこととしないことについての前のセクションを読むことをお勧めします。ほとんどの内容はここにも当てはまります。)

zsh zmv:

zmv '(**/)(*)' '$1${(L)2}'

ファイル数が多い場合は、事前zmodload zsh/filesに実行して作業を高速化できます。これにより、組み込みバージョンが有効になりますmvzmv実際に名前を変更するため)。

mmv(ディレクトリでない場合にのみ名前を変更する):

mmv ';*' '#1#l2'

findperlの使用rename (隠しファイルと隠しディレクトリ内のファイルの名前も変更):

find . -depth -name '*[[:upper:]]*' -exec rename '
  s:[^/]+\Z:\L$&:' {} +

POSIXly(隠しファイルと隠しディレクトリのファイル名も変更):

find . -depth -name '*[[:upper:]]*' -exec sh -c '
  for f do
    dir=${f%/*}
    name=${f##*/}
    newname=$(awk "BEGIN{print tolower(ARGV[1])}" "$name")
    mv -i -- "$f" "$dir/$newname"
  done' sh {} +

答え2

代わりはを使用することですrename - Perl extension for renaming multiple files

すべてのファイル名を小文字に変換するには:rename 'y/A-Z/a-z/' *

インストールしないようにするには、次のようにします。

for item in *; do
  mv "$item" "${item,,}" 
done

関連情報