Mehrere Dateien mit 2 Bedingungen / Ersetzungen in einer Zeile umbenennen?

8

Ich versuche ein paar Bilder umzubenennen:

IMG_1.JPG
IMG_2.JPG
IMG_3.JPG

Ich möchte ersetzen IMGmit imgund .JPGmit .jpg- ich weiß , wie der zweite Teil zu tun:

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

Mein Problem ist , dass ich nicht scheinen kann mv IMG_.JPGzu img_.jpg- ich weiß , Sie mehrere Muster passieren können rename, aber ich kann nicht scheinen , um die vorhandenen Dateinamen mit einem geändertenen Kleinwert zu verwenden.

Wie gehe ich vor?

treyBake
quelle

Antworten:

10

Möglicherweise müssen Sie den Befehl zum Umbenennen von Perl verwenden. Auf meiner CentOS-Box heißt es "Vorname".

$ 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 [email protected]
$

Wenn Sie den dummen renameBefehl von util-linux(manchmal aufgerufen rename.ul) verwenden möchten , müssen Sie ihn möglicherweise in zwei Schritten ausführen, z

$ 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
$
Steve
quelle
3
Beachten Sie, dass das perl renameälter ist als das dumme renamein util-linux, das Sie einfach alt nennenrename . Es ist sogar älter als Linux.
Stéphane Chazelas
6

Um Ihre Frage im Generikum zu beantworten,

Mehrere Dateien mit 2 Bedingungen / Ersetzungen in einer Zeile umbenennen?

Normalerweise verwenden Sie Erfassungsgruppen , die im Ersetzungsausdruck unter Verwendung der entsprechenden Rückreferenzen auf sie verweisen . Zum Beispiel

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

In diesem speziellen Fall wäre es jedoch einfacher, den Kleinbuchstaben-Modifikator einfach \Lauf den gesamten Namen anzuwenden :

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

Eine andere Alternative mit mmv

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

(Entfernen Sie das -n, um die Umbenennung tatsächlich durchzuführen).

Steeldriver
quelle
Oder zmv:zmv '*.JPG' '${(L)f}'
Stéphane Chazelas
1
Eine einfachere Version von rename 's/.*/\L$&/' *.JPGwärerename '$_ = lc' *.JPG
Hobbs
2

Verwenden von mv:

sh kompatibel:

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

bash (Danke steeldriver):

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

Dadurch werden alle .JPGDateien im aktuellen Verzeichnis durchlaufen und in denselben Namen umbenannt, wobei alle Großbuchstaben in Kleinbuchstaben umgewandelt werden.

jesse_b
quelle
1

Der einfachste Weg und basierend auf der Manpage , die keinen regulären Ausdruck abdeckt :

rename 'IMG' 'img' * ; rename 'JPG' 'jpg' *
Hossein Vatani
quelle
IMHO, eine einfache Antwort wie diese erreicht, was der schwere Schlag gelegentlich nicht schafft. Keine Bosheit gegenüber erfahrenen Programmierern, aber da die Frage von einem Neuling zu stammen scheint, muss die Einfachheit gefördert werden.
Hopping Bunny