Puncte:5

ImageMagick convertește mai multe fișiere

drapel ru

Am 3 fișiere într-un director:

aaa.jpg    
bbb.jpg  
ccc.jpg  

Pot reduce o imagine folosind ImagkMagick convert:

converti aaa.jpg -redimensionează 1200x900 aaa-small.jpg  

Vreau să fac toate imaginile din director, ceva de genul:

converti *.jpg -redimensionare 1200x900 *-small.jpg  

dar acest lucru are ca rezultat fișiere numite astfel:

*-small-0.jpg  
*-small-1.jpg  
*-small-2.jpg  

Ce vreau eu este:

aaa-small.jpg  
bbb-small.jpg  
ccc-small.jpg  

Cum pot face acest lucru?

Brian Z avatar
drapel uz
Mogrify este comanda ImageMagick concepută pentru joburi în lot. Întrebarea este legată de aceasta și, eventual, este o copie a acesteia: https://superuser.com/questions/597428/how-can-i-run-mogrify-but-prefix-the-filename
Puncte:9
drapel hr

Este frustrant de opac în documentație, dar poți trece un citat shell glob to convertit (citat pentru a preveni extinderea prematură a carcasei) și utilizați Nume de fișiere Procent Escapes pentru a construi nume de fișiere de ieșire sub formă %[filename:label] (Unde eticheta este o etichetă arbitrară specificată de utilizator), folosind evadarea numelui de bază de intrare %[basename] sau echivalentul său moștenit %t:

$ ls ???.jpg
aaa.jpg bbb.jpg ccc.jpg

atunci

$ convert '*.jpg' -set filename:fn '%[basename]-small' -resize 1200x900 '%[filename:fn].jpg'

rezultând

$ ls ???-small.jpg
aaa-small.jpg bbb-small.jpg ccc-small.jpg
Puncte:6
drapel jp

Într-o buclă for este posibil să utilizați caracteristicile descrise în man bash la

Extinderea parametrilor
...
  ${parameter%%word}
      Eliminați modelul de sufix care se potrivește. Cuvântul este extins pentru a produce un model doar
      ca și în extinderea numelui de cale. Dacă modelul se potrivește cu o porțiune din urmă a
      valoarea extinsă a parametrului, atunci rezultatul expansiunii este extins
      valoarea parametrului cu cel mai scurt model de potrivire (cazul ``%'') sau
      cel mai lung model de potrivire (cazul ``%%'') a fost șters. Dacă parametrul este @ sau *,
      operația de eliminare a modelului se aplică fiecărui parametru de poziție pe rând,
      iar extinderea este lista rezultată. Dacă parametrul este o variabilă matrice
      în subscriptie cu @ sau *, operația de eliminare a modelului este aplicată fiecărui membru
      a matricei la rândul său, iar extinderea este lista rezultată.

Următoarea linie ar trebui să facă treaba

pentru f în ./*.jpg ; convertiți „$f” -redimensionați 1200x900 „${f%.jpg}-small.jpg” ; Terminat

Aceasta funcționează în bash, care este shell-ul standard al Ubuntu.Cred că este mai ușor de reținut decât metoda elegantă a lui Steeldriver (care folosește doar convertit si nu pentru construi).

rexkogitans avatar
drapel cn
+1 pentru că urmează filozofia Unix conform căreia fiecare instrument ar trebui să facă o mică parte din muncă eficient, mai degrabă decât un singur instrument să facă totul.
7efkvNEq avatar
drapel gh
Vă sugerez să schimbați numele fișierelor de la `*.jpg` la `./*.jpg` în cazul în care un nume începe cu `-`.
sudodus avatar
drapel jp
@7efkvNEq, Mulțumesc, este o idee bună.
Puncte:-2
drapel bd
mkdir mic
pentru f în *.jpg ; convertiți $f -redimensionați 1200x900 mic/$f; Terminat
drapel ru
Acest lucru nu răspunde la întrebare. Numele fișierelor sunt aceleași.
sudodus avatar
drapel jp
@AlLelopath, Adevărat, numele fișierelor sunt aceleași, dar în alt director. Am folosit aceasta metoda si cred ca este buna ;-)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.