GNU/Linux >> Linux の 問題 >  >> Linux

「名前の変更」を使用して小文字の拡張子を持つようにファイルの名前を変更しますか?

私は現在、大量のファイルの名前を変更しようとしていますが、次のような非常に厄介な方法を使用しています。

rename 's:(.*).MOV:$1.mov:g' *.MOV
rename 's:(.*).JPG:$1.jpg:g' *.JPG

私が本当にやりたいのは、「y」sedを使用してこれらすべてのコマンドを組み合わせることができるようにすることです。 オペレーター。明らかに、この演算子を使用すると、アイテムを小文字に変換できます。問題は、拡張機能のみを変換する必要があることです。このコマンドを使用してこれを行う方法はありますか?基本的に、次の式のキャプチャグループを小文字に変換する必要があります:^.+.(.+)$ 。これを行う方法はありますか?私はこの種の変革に少し慣れていません。

承認された回答:

これがPerlベースのrename 構文から判断すると、Debian、Ubuntu、および派生物で見つかります。 trは使用できません 文字列全体に作用するため、演算子。ただし、拡張子を一致させ、Lで小文字にすることはできます 。

rename 's/.[^.]*$/L$&/' *.JPG *.MOV

ここでは不要ですが、正規表現が小文字にしたい部分よりも一致している場合は、一致する部分をグループに入れることができます:

rename 's/.([^.]*)$/.L$1/' *.JPG *.MOV

*.JPG *.MOVを置き換えます *.*による 拡張子に関係なく、すべてのファイルに作用します。 bash≥4.3(およびbash 4.0–4.2でも、これはディレクトリへのシンボリックリンクもトラバースすることに注意してください)では、サブディレクトリなどのファイルを再帰的に簡単に操作できます。

rename 's/.[^.]*$/L$&/' **/*.*

zshファンの場合(:r および:e 修飾子は、拡張子をファイルの残りの部分から分離します):

autoload zmv
zmv '*.(MOV|JPG)' '${f:r}.${(L)f:e}'      # these extensions, current directory
zmv '*.*' '${f:r}.${(L)f:e}'              # all extensions, current directory
zmv '**/*.*' '${f:r}.${(L)f:e}'           # all extensions, recursive directory traversal

Linux
  1. ディレクトリ内のすべてのファイルを削除する3つの方法(拡張子が付いた1つまたは少数のファイルを除く)

  2. rsyncを使用してファイルをバックアップします

  3. パターンに従ってLinuxで多くのファイルの名前を変更する

  1. Linux シェルを使用してスペースを含むファイルの名前を変更するにはどうすればよいですか?

  2. 無効なエンコードを含むファイルの名前を一括変更する方法、または無効なエンコード文字を一括置換する方法は?

  3. Linuxで正規表現を使用してファイルの名前を変更する

  1. Linuxでファイルの名前を変更する方法

  2. Centos –すべてのファイルの名前を特定の名前に変更しますか?

  3. ディレクトリ付きの猫ファイル?