Führen Sie den Befehl für ein Paar von Dateien aus

675
Manu

** Kontext: ** Ich habe viele alte Bilder gescannt, die auf der Rückseite beschriftet sind.

Mit imagemagick kann ich die Vorder- und Rückseite des Bildes folgendermaßen anhängen:

montage out20.jpg out21.jpg -gravity center -geometry +1+1 -tile 1x2 out2021.jpg; rm out20.jpg out21.jpg; #(vertical append) 

Mein Problem ist, dass ich eine Menge Bilder habe, auf die ich den Befehl anwenden kann.

Gibt es eine Möglichkeit, bash zu bitten, "montage" auf jede ungerade Datei anzuwenden und automatisch den Dateinamen hinzuzufügen, der danach kommt? Der Dateiname der Ausgabe ist ebenfalls ein Problem.

1

1 Antwort auf die Frage

4
djhowell

Schnell und dreckig:

#!/bin/bash ls *.jpg | while read file do number=`echo $file | tr -dc 0-9`; if [ $((number % 2)) -eq 0 ]; then nextnumber=`echo $number + 1 | bc`; nextfile=`echo $file | sed s/$number/$nextnumber/`; outfile=`echo $file | sed s/$number/$number$nextnumber/`; montage $file $nextfile -gravity center -geometry +1+1 -tile 1x2 $outfile fi done 

Sie sagten, dass Sie die Montage auf die ungeraden Dateien anwenden sollen, aber auch in Ihrem Beispiel angegeben. Der obige Code funktioniert sogar. Wenn Sie die ungeraden Dateien zuerst benötigen, ändern Sie einfach diese Zeile:

if [ $((number % 2)) -eq 0 ]; then 

um das zu sein:

if [ $((number % 2)) -eq 1 ]; then 
Beeindruckend und schnell! Ich werde das versuchen Manu vor 14 Jahren 0
Ich weiß nicht, ob jedes "linke" Bild gerade oder ungerade sein wird, ich bin mir sicher, dass sie aufeinander folgen ... Also könnte ich out4.jpg out5.jpg out23.jpg raus haben . Manu vor 14 Jahren 0
Wenn dies der Fall ist, können Sie wahrscheinlich nur die Zeilen entfernen, die mit "if" und "fi" beginnen. djhowell vor 14 Jahren 0
Works great ! Thank very much. Now I have to tweak it, so that it'll take a file, append it to file+1, and then jump to file+2 .... Manu vor 14 Jahren 0
Ich habe es mit einer Theke gemacht; Ich teste ob es gerade geht. Nochmals vielen Dank, Sie rocken bei bash :) Manu vor 14 Jahren 0
Ich habe "ls -v" für die natürliche Sortierung verwendet Manu vor 14 Jahren 0
You can do something like `nextfile=$` instead of `sed` and you don't need `bc` for integer addition - just do `((nextnumber = number + 1))`. Dennis Williamson vor 14 Jahren 1