1つの行に2つの条件/置換を含む複数のファイルの名前を変更しますか?


8

いくつかの画像の名前を変更しようとしています:

IMG_1.JPG
IMG_2.JPG
IMG_3.JPG

私は交換したいIMGimgして.JPG.jpg-私は2番目の部分を行う方法を知っています:

$ rename 's/\.JPG$/\.jpg/' *.JPG

私の問題は、私がように見えることはできませんということであるmv IMG_.JPGimg_.jpg私はあなたに複数のパターンを渡すことができます知っている- renameが、私は改正小文字の値で既存のファイル名を使用するように見えることはできません。

これについてどうすればよいですか?

回答:


10

おそらく、perl renameコマンドを使用する必要があります。私のCentOSボックスでは、「prename」と呼ばれています。

$ ls
IMG_1.JPG  IMG_2.JPG  IMG_3.JPG
$ prename 's/^IMG/img/;s/\.JPG$/\.jpg/' *JPG
$ ls
img_1.jpg  img_2.jpg  img_3.jpg
$

$ prename -h
Usage: prename [OPTION]... PERLEXPR FILE...
Rename FILE(s) using PERLEXPR on each filename.

  -b, --backup                  make backup before removal
  -B, --prefix=SUFFIX           set backup filename prefix
  -f, --force                   remove existing destinations, never prompt
  -i, --interactive             prompt before overwrite
  -l, --link-only               link file instead of reame
  -n, --just-print, --dry-run   don't rename, implies --verbose
  -v, --verbose                 explain what is being done
  -V, --version-control=METHOD  override the usual version control
  -Y, --basename-prefix=PREFIX  set backup filename basename prefix
  -z, -S, --suffix=SUFFIX       set backup filename suffix
      --help                    display this help and exit
      --version                 output version information and exit

The backup suffix is ~, unless set with SIMPLE_BACKUP_SUFFIX.  The
version control may be set with VERSION_CONTROL, values are:

  numbered, t     make numbered backups
  existing, nil   numbered if numbered backups exist, simple otherwise
  simple, never   always make simple backups

Report bugs to pederst@cpan.org
$

(と呼ばれることもある)のdumb renameコマンドを使用する場合は、おそらく2つのステップで実行する必要があります。util-linuxrename.ul

$ ls
IMG_1.JPG  IMG_2.JPG  IMG_3.JPG
$ rename IMG img *JPG
$ rename JPG jpg *JPG
$ ls
img_1.jpg  img_2.jpg  img_3.jpg
$

3
プレーンオールドと呼ぶutil-linuxにあるperl renameダムよりも古いrenameことに注意してください。Linuxよりも古いものです。rename
ステファンChazelas

6

ジェネリックで質問に答えるために、

1つの行に2つの条件/置換で複数のファイルの名前を変更しますか?

通常、キャプチャグループを使用し、対応する後方参照を使用して置換式でそれらを参照します。例えば

$ rename -n 's/^(.*)_(.*)\.JPG$/\L$1_$2.jpg/' *.JPG
rename(IMG_2.JPG, img_2.jpg)
rename(IMG_3.JPG, img_3.jpg)

ただし、この特定のケースでは、小文字の修飾子\Lを名前全体に適用する方が簡単です。

$ rename -n 's/.*/\L$&/' *.JPG
rename(IMG_2.JPG, img_2.jpg)
rename(IMG_3.JPG, img_3.jpg)

別の方法として、 mmv

$ mmv -n '*.JPG' '#l1.jpg'
IMG_2.JPG -> img_2.jpg
IMG_3.JPG -> img_3.jpg

-n実際に名前を変更するには、を削除します)。


それともzmvさん:zmv '*.JPG' '${(L)f}'
ステファンChazelas

1
のより単純なバージョンは次のrename 's/.*/\L$&/' *.JPGようになりますrename '$_ = lc' *.JPG
ホッブ2018

2

使用mv

sh互換:

for file in *.JPG; do mv "$file" "$(echo "$file" | tr '[:upper:]' '[:lower:]')"; done

bash(steeldriverに感謝):

for file in *.JPG; do mv "$file" "${file,,}"; done

これにより.JPG、現在のディレクトリ内のすべてのファイルがループされ、すべての大文字が小文字に変換された同じ名前に名前が変更されます。


1

最も簡単な方法で、正規表現をカバーしていないmanページに基づいています

rename 'IMG' 'img' * ; rename 'JPG' 'jpg' *

私見、このような単純な答えは、強打が時々失敗することを達成します。熟練したプログラマーに対する悪意はありませんが、問題は初心者からのものであるように思われるため、シンプルさを奨励する必要があります。
ホッピングバニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.