hallo Freunde Wenn ich im tif fotografiere macht die Kamera doppelte Aufnahen: p1090034.jpg p1090034.tif p1090035.jpg p1090035.tif p1090036.jpg p1090036.tif p1090037.jpg (Vorschaubild zu p1....37.mov) p1090037.mov Wie kann ich die JPG Bilder (bis auf das Vorschabild) löschen. Bild-A.jpg Bild-A.tif Es dürfen nur JPG-Bilder gelöscht werden, wo das gleiche Bild in TIF Format ist. Bisher habe ich das immer mit Hand, das ist aber recht mühseelig Danke und Schönes Wochenende Stefan -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Sam, 13 Mär 2010, Stefan Plenert schrieb:
Wenn ich im tif fotografiere macht die Kamera doppelte Aufnahen:
p1090034.jpg p1090034.tif [..] p1090037.jpg (Vorschaubild zu p1....37.mov) p1090037.mov
Wie kann ich die JPG Bilder (bis auf das Vorschabild) löschen.
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done Bitte erst(!) verstehen was das macht. Dann kannst du auch die Option '-i' beim 'rm' weglassen. -dnh -- "Microsoft admitted its Vista operating system was a 'less good product' in what IT experts have described as the most ambitious understatement since the captain of the Titanic reported some slightly damp tablecloths." http://www.thedailymash.co.uk/ -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Sonntag, 14. März 2010 04:27:33 David Haller wrote:
Hallo,
Am Sam, 13 Mär 2010, Stefan Plenert schrieb:
Wenn ich im tif fotografiere macht die Kamera doppelte Aufnahen:
p1090034.jpg p1090034.tif
[..]
p1090037.jpg (Vorschaubild zu p1....37.mov) p1090037.mov
Wie kann ich die JPG Bilder (bis auf das Vorschabild) löschen.
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
Bitte erst(!) verstehen was das macht. Dann kannst du auch die Option '-i' beim 'rm' weglassen.
-dnh
Danke David, bin schon etwas weiter in shell, aber ist mir doch etwas hoch. wills auch nicht wissen, sonst komme ich mit dem gelernten durcheinander. probiere es im kopierten Ordner aus. schönes Wochenende. Stefan. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
David Haller schrieb:
Hallo,
Am Sam, 13 Mär 2010, Stefan Plenert schrieb:
Wenn ich im tif fotografiere macht die Kamera doppelte Aufnahen:
p1090034.jpg p1090034.tif
[..]
p1090037.jpg (Vorschaubild zu p1....37.mov) p1090037.mov
Wie kann ich die JPG Bilder (bis auf das Vorschabild) löschen.
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
Bitte erst(!) verstehen was das macht. Dann kannst du auch die Option '-i' beim 'rm' weglassen.
-dnh
Hallo David, wenn ich das mal hier sagen darf: sehr elegante Lösung! Gefällt mir ;-) Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Sonntag, 14. März 2010 09:54:09 Stefan Plenert wrote:
On Sonntag, 14. März 2010 04:27:33 David Haller wrote:
Hallo,
Am Sam, 13 Mär 2010, Stefan Plenert schrieb:
Wenn ich im tif fotografiere macht die Kamera doppelte Aufnahen:
p1090034.jpg p1090034.tif
[..]
p1090037.jpg (Vorschaubild zu p1....37.mov) p1090037.mov
Wie kann ich die JPG Bilder (bis auf das Vorschabild) löschen.
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
Bitte erst(!) verstehen was das macht. Dann kannst du auch die Option '-i' beim 'rm' weglassen.
-dnh
Danke David,
bin schon etwas weiter in shell, aber ist mir doch etwas hoch. wills auch nicht wissen, sonst komme ich mit dem gelernten durcheinander.
probiere es im kopierten Ordner aus.
Verkehrt rum geschrieben, TIFF hat eine höhere Farbauflösung und soll stehen bleiben. JPG soll gelöscht werden. Bloß Vorschaubilder und Kettenbilder kann ich nur in JPG gemacht. Es gibt noch einige andere Situationen, wo ich tif nicht einsetzen kann. So dass ich nicht alles was mit jpg endet löschen kann. Wenn Bild-034.JPG gleich Bild-034.TIF dann Bild-034.JPG löschen
schönes Wochenende.
Stefan.
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Sonntag, 14. März 2010 23:10:11 Stefan Plenert wrote: :
On Sonntag, 14. März 2010 04:27:33 David Haller wrote:
Hallo,
Am Sam, 13 Mär 2010, Stefan Plenert schrieb:
Wenn ich im tif fotografiere macht die Kamera doppelte Aufnahen:
p1090034.jpg p1090034.tif
[..]
p1090037.jpg (Vorschaubild zu p1....37.mov) p1090037.mov
Wie kann ich die JPG Bilder (bis auf das Vorschabild) löschen.
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
Bitte erst(!) verstehen was das macht. Dann kannst du auch die Option '-i' beim 'rm' weglassen.
-dnh
.
probiere es im kopierten Ordner aus.
Verkehrt rum geschrieben, Die tif-Bilder wurden alle gelöscht. TIFF hat eine höhere Farbauflösung und soll stehen bleiben. JPG soll gelöscht werden. Bloß Vorschaubilder und Kettenbilder kann ich nur in JPG gemacht. Es gibt noch einige andere Situationen, wo ich tif nicht einsetzen kann. So dass ich nicht alles was mit jpg endet löschen kann.
for datei in *.jpg; do rm -i -f "${datei//%.jpg/.tif}"; done hier hat er alle jpg Bilder, auch das Vorschabild, was ja stehen bleiben soll gelöscht (Wenn dann sonst) Wenn Bild-034.JPG gleich Bild-034.TIF dann Bild-034.JPG löschen sonst nicht.
schönes Wochenende.
Stefan.
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag 14 März 2010 23:30 schrieb Stefan Plenert:
On Sonntag, 14. März 2010 23:10:11 Stefan Plenert wrote:
On Sonntag, 14. März 2010 04:27:33 David Haller wrote:
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
@David: Ich habe das gerade mal in einem Testverzeichnis getestet (per Copy/Paste, also mit "kleinem i"). Die Datei wurde ohne Rückfrage gelöscht. Verstehe ich die manpage falsch, oder ist das ein Bug?
probiere es im kopierten Ordner aus.
Zu Deinem Glück
Verkehrt rum geschrieben, Die tif-Bilder wurden alle gelöscht.
Dann hast Du David's Lösung nicht korrekt übernommen. Die Lösung läuft darauf hinaus: Falls xyz.tif existiert, so lösche xyz.jpg. Andersherum bleiben genau die .jpg Dateien erhalten, zu denen keine .tif Datei existiert. Wenn nicht gerade die Dateien xyz.tif, xyz.jpg UND xyz.mov existieren (und das halte ich für äußerst unwahrscheinlich) macht die Lösung genau das, was Du willst. Habe ich gerade auch noch mal getestet.
for datei in *.jpg; do rm -i -f "${datei//%.jpg/.tif}"; done
Ich will das jetzt nicht analysieren, aber das ist NICHT David's Lösung. good night Ralf -- Antworten bitte nur in die Mailingliste! PMs bitte an: listpm (@) arndt-de (.) eu -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Montag, 15. März 2010 00:50:59 Ralf Arndt wrote:
Am Sonntag 14 März 2010 23:30 schrieb Stefan Plenert:
On Sonntag, 14. März 2010 23:10:11 Stefan Plenert wrote:
On Sonntag, 14. März 2010 04:27:33 David Haller wrote:
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
@David: Ich habe das gerade mal in einem Testverzeichnis getestet (per Copy/Paste, also mit "kleinem i"). Die Datei wurde ohne Rückfrage gelöscht. Verstehe ich die manpage falsch, oder ist das ein Bug?
probiere es im kopierten Ordner aus.
Zu Deinem Glück
Verkehrt rum geschrieben, Die tif-Bilder wurden alle gelöscht.
Dann hast Du David's Lösung nicht korrekt übernommen. Die Lösung läuft darauf hinaus: Falls xyz.tif existiert, so lösche xyz.jpg.
Andersherum bleiben genau die .jpg Dateien erhalten, zu denen keine .tif Datei existiert.
Wenn nicht gerade die Dateien xyz.tif, xyz.jpg UND xyz.mov existieren (und das halte ich für äußerst unwahrscheinlich) macht die Lösung genau das, was Du willst. Habe ich gerade auch noch mal getestet.
for datei in *.jpg; do rm -i -f "${datei//%.jpg/.tif}"; done
Ich will das jetzt nicht analysieren, aber das ist NICHT David's Lösung.
good night Ralf
Die Testergebnisse Orginal-Inhalt des Ordners (habe ihn von Windows XP Home in OS 11.1 home kopiert) :~/01u> l insgesamt 102124 31924 1. Mai 2009 p1090037.jpg* 79726758 1. Mai 2009 p1090037.mov* 5792768 24. Dez 19:16 p1180001.tif* 355376 24. Dez 19:16 p1180002.jpg* 5792768 24. Dez 19:16 p1180002.tif* 410261 24. Dez 19:23 p1180003.jpg* 5792768 24. Dez 19:23 p1180003.tif* 336896 24. Dez 19:24 p1180004.jpg* 5792768 24. Dez 19:24 p1180004.tif* 361025 25. Dez 10:39 p1180006.jpg* David Haller Formel: for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done stefan@-1c4m:~/01u> for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done stefan@-1c4m:~/01u> dir insgesamt 79428 31924 1. Mai 2009 p1090037.jpg 79726758 1. Mai 2009 p1090037.mov 355376 24. Dez 19:16 p1180002.jpg 410261 24. Dez 19:23 p1180003.jpg 336896 24. Dez 19:24 p1180004.jpg 361025 25. Dez 10:39 p1180006.jpg stefan@-1c4m:~/01u> keine Bild in tif-Format mehr im Ordner, so etwa als hätte ich sie mit find herausgesucht und gelöscht. Alles was mit *.tif endet. jetzt habe ich ind der Formel tif gegen jpg ausgetauscht. for datei in *.jpg; do rm -i -f "${datei//%.jpg/.tif}"; done tefan@-1c4m:~> cd 01u stefan@-1c4m:~/01u> for datei in *.jpg; do rm -i -f "${datei//%.jpg/.tif}"; done stefan@-1c4m:~/01u> dir insgesamt 100628 79726758 1. Mai 2009 p1090037.mov 5792768 24. Dez 19:16 p1180001.tif 5792768 24. Dez 19:16 p1180002.tif 5792768 24. Dez 19:23 p1180003.tif 5792768 24. Dez 19:24 p1180004.tif stefan@linux-1c4m:~/01u> jetzt fehlt das Vorschaubild 31924 1. Mai 2009 p1090037.jpg was ja stehen bleiben sollte könnte auch find -name "*.jpg" und löschen, aber will nicht alle gelöscht haben. 001.jpg 001.tif 002.jpg 003.jpg 003.mow 004.jpg 005.jpg 006.jpg 007.jpg 008.jpg will nur 001.jpg (wo es auch 001.tif gibt) gelöscht haben. alle anderen sollen stehen bleiben. Tiff hat eine höhere Farbauflösung. Kann leider nicht alles in tif aufnehmen. Kettenaufnahmen werden in jpg gemacht, es gibt auch die Möglichkeit 3 Bilder zu machen - unter-, null, überbelichten - auch nur jpg (-a 0 +a) Ich weiss nicht welche Rolle das Spielt, das der Ordner von Windows FAT32 kommt Viele Grüße Stefan -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Montag 15 März 2010 10:09 schrieb Stefan Plenert:
On Montag, 15. März 2010 00:50:59 Ralf Arndt wrote:
David Haller Formel:
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
stefan@-1c4m:~/01u> for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done stefan@-1c4m:~/01u> dir insgesamt 79428 31924 1. Mai 2009 p1090037.jpg 79726758 1. Mai 2009 p1090037.mov 355376 24. Dez 19:16 p1180002.jpg 410261 24. Dez 19:23 p1180003.jpg 336896 24. Dez 19:24 p1180004.jpg 361025 25. Dez 10:39 p1180006.jpg stefan@-1c4m:~/01u>
Komisch den Effekt habe ich jetzt plötzlich auch. Dabei war ich mir sicher, dass es so bei den ersten Tests funktioniert hat. Ersetze mal - das doppelte "/" durch ein einfaches - und für erste Tests "rm -i -f" durch echo also for datei in *.tif; do echo "${datei/%.tif/.jpg}"; done Das wirft Dir dann alle .jpg Dateien aus, zu denen .tif Dateien existieren. Wenn das funktioniert, kannst Du echo wieder durch den rm Befehl ersetzen. Grüße Ralf -- Antworten bitte nur in die Mailingliste! PMs bitte an: listpm (@) arndt-de (.) eu -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Ralf! On Mo, 15 Mär 2010, Ralf Arndt wrote:
Am Montag 15 März 2010 10:09 schrieb Stefan Plenert:
On Montag, 15. März 2010 00:50:59 Ralf Arndt wrote:
David Haller Formel:
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
stefan@-1c4m:~/01u> for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done stefan@-1c4m:~/01u> dir insgesamt 79428 31924 1. Mai 2009 p1090037.jpg 79726758 1. Mai 2009 p1090037.mov 355376 24. Dez 19:16 p1180002.jpg 410261 24. Dez 19:23 p1180003.jpg 336896 24. Dez 19:24 p1180004.jpg 361025 25. Dez 10:39 p1180006.jpg stefan@-1c4m:~/01u>
Komisch den Effekt habe ich jetzt plötzlich auch. Dabei war ich mir sicher, dass es so bei den ersten Tests funktioniert hat.
Das könnte ein Bug in der bash sein: Das hier funktioniert nicht wie gewünscht for i in *.tif; do rm -i -f -- "${i//%.tif/.jpg}"; done während das hier funktioniert: for i in *.tif; do rm -i -f -- "${i/%.tif/.jpg}"; done Das scheint eh ein neues Feature der bash zu sein, weil ich zumindest bisher noch nichts davon gelesen habe, dass man % bzw # bei Pattern substitution benutzen darf. (% erzwingt ein Match am Ende, # am Anfang). Kann natürlich auch sein, dass es bisher einfach nicht vorgesehen ist, Parameter Substitution mittels %/# zu verwenden. Persönlich würde ich ja eh eher sowas hier benutzen: for i in *.tif; do rm -i -f -- "${i/%.tif}.jpg"; done Das ist nämlich portabel. Mit freundlichen Grüßen Christian -- Weg mit dem Watzmann! Freie Sicht auf Südtirol! -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Ralf! On Mo, 15 Mär 2010, Ralf Arndt wrote:
Am Sonntag 14 März 2010 23:30 schrieb Stefan Plenert:
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
@David: Ich habe das gerade mal in einem Testverzeichnis getestet (per Copy/Paste, also mit "kleinem i"). Die Datei wurde ohne Rückfrage gelöscht. Verstehe ich die manpage falsch, oder ist das ein Bug?
Nein. Du verwendest 2 gegenteilige Optionen. Entweder rm fragt nach, oder es löscht. In dem Fall hier, überschreibt die nachfolgende Option einfach die vorherige. Es hängt also davon ab, in welcher Reihenfolge du die Optionen anwendest: #v+ chrisbra@t41:/tmp$ touch foobar{1,2} chrisbra@t41:/tmp$ rm -if foobar1 „foobar1“ entfernt chrisbra@t41:/tmp$ rm -fi foobar2 rm: reguläre leere Datei „foobar2“ entfernen? y „foobar2“ entfernt #v- Mit freundlichen Grüßen Christian -- Armselig der Schüler, der seinen Meister nicht übertrifft. -- Leonardo da Vinci (Philosophische Tagebücher) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Montag, 15. März 2010 schrieb Christian Brabandt:
(...). Persönlich würde ich ja eh eher sowas hier benutzen: for i in *.tif; do rm -i -f -- "${i/%.tif}.jpg"; done ^ Muß der '/' da eigentlich hin?
Gruß Jan -- Reality is the illusion produced by an alcohol deficiency. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Jan! On Mo, 15 Mär 2010, Jan Ritzerfeld wrote:
Am Montag, 15. März 2010 schrieb Christian Brabandt:
(...). Persönlich würde ich ja eh eher sowas hier benutzen: for i in *.tif; do rm -i -f -- "${i/%.tif}.jpg"; done ^ Muß der '/' da eigentlich hin?
Natürlich nicht. Mift. Mit freundlichen Grüßen Christian -- Wenn wir Begabungen haben, so sollten wir sie ohne jede Herablassung auch für andere verwenden. Unsere Schwächen jedoch sollten wir demütig und still ertragen, wenn wir sie schon nicht ausmerzen können. -- H. Bauer -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 15 Mär 2010, Ralf Arndt schrieb:
Am Montag 15 März 2010 10:09 schrieb Stefan Plenert:
On Montag, 15. März 2010 00:50:59 Ralf Arndt wrote: David Haller Formel:
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
BTW: das -f scheint das -i zu überschreiben. Ersteres verwende ich schlicht zu selten ;)
stefan@-1c4m:~/01u> for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done stefan@-1c4m:~/01u> dir insgesamt 79428 31924 1. Mai 2009 p1090037.jpg 79726758 1. Mai 2009 p1090037.mov 355376 24. Dez 19:16 p1180002.jpg 410261 24. Dez 19:23 p1180003.jpg 336896 24. Dez 19:24 p1180004.jpg 361025 25. Dez 10:39 p1180006.jpg stefan@-1c4m:~/01u>
Verwendest du die bash?
Komisch den Effekt habe ich jetzt plötzlich auch. Dabei war ich mir sicher, dass es so bei den ersten Tests funktioniert hat.
Tut hier auch.
Ersetze mal - das doppelte "/" durch ein einfaches
Das doppelte ist schon richtig.
- und für erste Tests "rm -i -f" durch echo also for datei in *.tif; do echo "${datei/%.tif/.jpg}"; done
Das wirft Dir dann alle .jpg Dateien aus, zu denen .tif Dateien existieren. Wenn das funktioniert, kannst Du echo wieder durch den rm Befehl ersetzen.
$ ls *.jpg 1.tif 2.tif 4.jpg 5.mov 7.jpg a b.tif a' b.jpg *.tif 2.jpg 3.jpg 4.tif 6.jpg 7.mov a"b.jpg a' b.tif 1.jpg 2.mov 3.tif 5.jpg 6.mov a b.jpg a"b.tif $ for datei in *.tif; do echo rm -i "${datei//%.tif/.jpg}"; done rm -i *.jpg rm -i 1.jpg rm -i 2.jpg rm -i 3.jpg rm -i 4.jpg rm -i a b.jpg rm -i a"b.jpg rm -i a' b.jpg (wobei 'rm -i' das *.jpg als ein gequotetes Argument bekommt, das wird nicht von der shell expandiert). Achso, per PM kam noch folgendes von Hans Alken: ==== Es sollte aber mindestens 1 .tif Datei da sein:
for datei in *.tif; do echo rm -i -f "${datei//%.tif/.jpg}"; done rm -i -f *.jpg ====
das schlägt allerdings nur zu wenn a) nullglob nicht gesetzt ist und => mit nullglob läuft die Schleife über "null" Elemente, also gar nicht oder b) eine Datei '*.tif' existiert, dann wird eine Datei '*.jpg' gelöscht. Andernfalls kommt schlicht die Fehlermeldung rm: *.jpg: No such file or directory (bzw. die lokale Übersetzung davon), die man getrost ignorieren kann. Stefan, Ralf: Bitte die Ausgabe von: $0 --version zeigen und dann vor der Schleife (mit echo oder rm -i (ohne -f)) ein set -x eingeben. -dnh -- Verstehe hier den Zusammenhang nicht. Oder meinst du, da du mehrere Platten hast, die sich nicht im Gehäuse in die Quere kommen, springen keine Pinguine auf die Windowsplatte und zertrümmern die Fenster mit ihren Watschelbeinchen. -- Thorsten von Plotho-Kettner, hier -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi David! On Mo, 15 Mär 2010, David Haller wrote:
Stefan, Ralf: Bitte die Ausgabe von:
$0 --version
zeigen und dann vor der Schleife (mit echo oder rm -i (ohne -f)) ein
set -x
eingeben.
Ich mach auch mal: #v- chrisbra@t41:/tmp/blder/a$ for datei in *.tif; do echo rm -i "${datei//%.tif/.jpg}"; done + for datei in '*.tif' + echo rm -i p1180001.tif rm -i p1180001.tif + for datei in '*.tif' + echo rm -i p1180002.tif rm -i p1180002.tif + for datei in '*.tif' + echo rm -i p1180003.tif rm -i p1180003.tif + for datei in '*.tif' + echo rm -i p1180004.tif rm -i p1180004.tif chrisbra@t41:/tmp/blder/a$ for datei in *.tif; do echo rm -i "${datei/%.tif/.jpg}"; done + for datei in '*.tif' + echo rm -i p1180001.jpg rm -i p1180001.jpg + for datei in '*.tif' + echo rm -i p1180002.jpg rm -i p1180002.jpg + for datei in '*.tif' + echo rm -i p1180003.jpg rm -i p1180003.jpg + for datei in '*.tif' + echo rm -i p1180004.jpg rm -i p1180004.jpg chrisbra@t41:/tmp/blder/a$ echo $BASH_VERSION + echo '4.0.33(1)-release' 4.0.33(1)-release #v- Mit freundlichen Grüßen Christian -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 15 Mär 2010, Christian Brabandt schrieb:
Das könnte ein Bug in der bash sein: Das hier funktioniert nicht wie gewünscht for i in *.tif; do rm -i -f -- "${i//%.tif/.jpg}"; done
während das hier funktioniert: for i in *.tif; do rm -i -f -- "${i/%.tif/.jpg}"; done
Das scheint eh ein neues Feature der bash zu sein, weil ich zumindest bisher noch nichts davon gelesen habe, dass man % bzw # bei Pattern substitution benutzen darf. (% erzwingt ein Match am Ende, # am Anfang). Kann natürlich auch sein, dass es bisher einfach nicht vorgesehen ist, Parameter Substitution mittels %/# zu verwenden.
Das gibt's mind. seit: $ bash --version GNU bash, version 2.03.0(1)-release (i386-suse-linux) Copyright 1998 Free Software Foundation, Inc. ==== man bash Parameter Expansion [..] ${parameter/pattern/string} ${parameter//pattern/string} The pattern is expanded to produce a pattern just as in pathname expansion. Parameter is expanded and the longest match of pattern against its value is replaced with string. In the first form, only the first match is replaced. The second form causes all matches of pattern to be replaced with string. If pattern begins with #, it must match at the beginning of the expanded value of parameter. If pattern begins with %, it must match at the end of the expanded value of parameter. ==== AFAIK ist das sogar portabel (POSIX). Achso: Korrekt dürfte "${datei/%.tif/.jpg}" sein. HTH, -dnh -- Wir Aliens wir müssen doch auf euch arme Menschlein aufpassen. Sonst macht Ich noch den grossen Blubb mit euerer Welt. [WoKo in dag°] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 15 Mär 2010, Christian Brabandt schrieb: [..]
Ich mach auch mal: #v- chrisbra@t41:/tmp/blder/a$ for datei in *.tif; do echo rm -i "${datei//%.tif/.jpg}"; done + for datei in '*.tif' + echo rm -i p1180001.tif [..] chrisbra@t41:/tmp/blder/a$ for datei in *.tif; do echo rm -i "${datei/%.tif/.jpg}"; done + for datei in '*.tif' + echo rm -i p1180001.jpg [..] chrisbra@t41:/tmp/blder/a$ echo $BASH_VERSION + echo '4.0.33(1)-release' 4.0.33(1)-release
Hm. Kannst du mal den Abschnitt aus der manpage angucken (ich komm erst morgen wieder dazu die 11.2 zu booten). Scheint mir ne Änderung oder ein Bug der Bash zu sein, daß ${parameter//%pattern/value} nicht mehr wie gewohnt funktioniert. -dnh -- Calvin: People think it must be fun to be a super genius, but they don't realize how hard it is to put up with all the idiots in the world. Hobbes: Isn't your pants' zipper supposed to be in the front? -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 15 Mär 2010, Christian Brabandt schrieb:
On Mo, 15 Mär 2010, Ralf Arndt wrote:
Am Sonntag 14 März 2010 23:30 schrieb Stefan Plenert:
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
@David: Ich habe das gerade mal in einem Testverzeichnis getestet (per Copy/Paste, also mit "kleinem i"). Die Datei wurde ohne Rückfrage gelöscht. Verstehe ich die manpage falsch, oder ist das ein Bug?
Nein. Du verwendest 2 gegenteilige Optionen. Entweder rm fragt nach, oder es löscht. In dem Fall hier, überschreibt die nachfolgende Option einfach die vorherige. Es hängt also davon ab, in welcher Reihenfolge du die Optionen anwendest:
#v+ chrisbra@t41:/tmp$ touch foobar{1,2} chrisbra@t41:/tmp$ rm -if foobar1 ???foobar1??? entfernt chrisbra@t41:/tmp$ rm -fi foobar2 rm: reguläre leere Datei ???foobar2??? entfernen? y ???foobar2??? entfernt #v-
Meine Schuld. Kommt davon, daß ich '-i' nur explizit und seeehr selten verwendet ;) -dnh -- Ein Hund denkt: Sie füttern mich, sie sorgen für mich, sie streicheln mich: das müssen Götter sein. Eine Katze denkt: Sie füttern mich, sie sorgen für mich, sie streicheln mich: ich muss ein Gott sein. -- Konni Scheller -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi David! On Mo, 15 Mär 2010, David Haller wrote:
Am Mon, 15 Mär 2010, Christian Brabandt schrieb:
Das scheint eh ein neues Feature der bash zu sein, weil ich zumindest bisher noch nichts davon gelesen habe, dass man % bzw # bei Pattern substitution benutzen darf. (% erzwingt ein Match am Ende, # am Anfang). Kann natürlich auch sein, dass es bisher einfach nicht vorgesehen ist, Parameter Substitution mittels %/# zu verwenden.
Das gibt's mind. seit:
$ bash --version GNU bash, version 2.03.0(1)-release (i386-suse-linux) Copyright 1998 Free Software Foundation, Inc.
==== man bash
[…] Tatsächlich? Dann habe ich jahrelang die Manpage nicht richtig verstanden oder gelesen ;)
AFAIK ist das sogar portabel (POSIX).
Eben nicht. http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_... Hier finde ich nichts über parameter substitution.
Achso: Korrekt dürfte "${datei/%.tif/.jpg}" sein.
In dem Fall schon. Mit freundlichen Grüßen Christian -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi David! On Mo, 15 Mär 2010, David Haller wrote:
Hm. Kannst du mal den Abschnitt aus der manpage angucken (ich komm erst morgen wieder dazu die 11.2 zu booten). Scheint mir ne Änderung oder ein Bug der Bash zu sein, daß ${parameter//%pattern/value} nicht mehr wie gewohnt funktioniert.
Sieht mir auch wie ein Bug aus. Ich teste gelegentlich mal das letzte Release. ,----[ man bash ]- | ${parameter/pattern/string} | Pattern substitution. The pattern is expanded to produce a pat- | tern just as in pathname expansion. Parameter is expanded and | the longest match of pattern against its value is replaced with | string. If pattern begins with /, all matches of pattern are | replaced with string. Normally only the first match is | replaced. If pattern begins with #, it must match at the begin- | ning of the expanded value of parameter. If pattern begins with | %, it must match at the end of the expanded value of parameter. | If string is null, matches of pattern are deleted and the / fol- | lowing pattern may be omitted. If parameter is @ or *, the sub- | stitution operation is applied to each positional parameter in | turn, and the expansion is the resultant list. If parameter is | an array variable subscripted with @ or *, the substitution | operation is applied to each member of the array in turn, and | the expansion is the resultant list. `---- Mit freundlichen Grüßen Christian -- In der Ehe will jeder Teil, daß bloß der andere anfange, pflichtmäßig und edel zu sein, dann woll er sehr erwidern, ja mehr geben als nur gegeben werde; - und unter diesem Wollen zanken sich beide fort, und keines fängt an. -- Jean Paul -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Montag 15 März 2010 22:34 schrieb David Haller:
Hm. Kannst du mal den Abschnitt aus der manpage angucken (ich komm erst morgen wieder dazu die 11.2 zu booten). Scheint mir ne Änderung oder ein Bug der Bash zu sein, daß ${parameter//%pattern/value} nicht mehr wie gewohnt funktioniert.
Deine Frage gilt zwar Christian, aber das habe ich heute schon gemacht (Zitat siehe [1]). Wenn ich das richtig sehe, sind bei ${parameter//%pattern/string} 1. parameter in den Fall der Variablenname 2. / das erste "/" trennt parameter und pattern 3. /%pattern der pattern usw. Laut manpage gelten "/" _und_ "%" nur wenn sie am Anfang des pattern stehen. Das kann aber einer von beiden. Das "%" wird in dem Fall anscheinend als Suchargument interpretiert, und damit wird kein pattern gefunde, der ersetzt werden muss. Es werden also die *.tif Dateien gelöscht. So verstehe ich das, lasse mich aber hier gerne korrigieren. Und hier das Zitat [1] man bash ... Parameter Expansion ... ${parameter/pattern/string} Pattern substitution. The pattern is expanded to produce a pattern just as in pathname expansion. Parameter is expanded and the longest match of pattern against its value is replaced with string. If pattern begins with /, ^^^^^^^^^^^^^^^^^^^^^^^^ all matches of pattern are replaced with string. Normally only the first match is replaced. If pattern begins with #, it must match at the beginning of the expanded value of parameter. If pattern begins ^^^^^^^^^^^^^^^^^^ with %, it must match at the end of the expanded value of parameter. ^^^^^^^^^^^^ If string is null, matches of pattern are deleted and the / following pattern may be omitted. If parameter is @ or *, the substitution operation is applied to each positional parameter in turn, and the expansion is the resultant list. If parameter is an array variable subscripted with @ or *, the substitution operation is applied to each member of the array in turn, and the expansion is the resultant list lg Ralf -- Antworten bitte nur in die Mailingliste! PMs bitte an: listpm (@) arndt-de (.) eu -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Montag 15 März 2010 20:15 schrieb Christian Brabandt:
Hi Ralf!
On Mo, 15 Mär 2010, Ralf Arndt wrote:
Am Sonntag 14 März 2010 23:30 schrieb Stefan Plenert:
for datei in *.tif; do rm -i -f "${datei//%.tif/.jpg}"; done
@David: Ich habe das gerade mal in einem Testverzeichnis getestet (per Copy/Paste, also mit "kleinem i"). Die Datei wurde ohne Rückfrage gelöscht. Verstehe ich die manpage falsch, oder ist das ein Bug?
Nein. Du verwendest 2 gegenteilige Optionen. Entweder rm fragt nach, oder es löscht. In dem Fall hier, überschreibt die nachfolgende Option einfach die vorherige. Es hängt also davon ab, in welcher Reihenfolge du die Optionen anwendest:
Damit wäre das geklärt. Danke für den Hinweis, da hätte ich auch drauf können, wenn ich mir die manpages nach den Optionen angesehen hätte. lg Ralf -- Antworten bitte nur in die Mailingliste! PMs bitte an: listpm (@) arndt-de (.) eu -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 15 Mär 2010, Christian Brabandt schrieb:
On Mo, 15 Mär 2010, David Haller wrote: [ ${var//%pat/repl} in bash ]
Das gibt's mind. seit:
$ bash --version GNU bash, version 2.03.0(1)-release (i386-suse-linux) ==== man bash
[???] Tatsächlich? Dann habe ich jahrelang die Manpage nicht richtig verstanden oder gelesen ;)
Offenbar ;) Geht mir auch immer mal wieder so.
AFAIK ist das sogar portabel (POSIX).
Eben nicht. http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_...
Hier finde ich nichts über parameter substitution.
Jap. Man kann nicht alles im Kopf haben. Dafür gibt's ja manpages und obige Webseite ;) ${parameter:offset} ${parameter:offset:length} scheint ebenfalls nicht in POSIX enthalten zu sein. Jedenfalls klappt das ${var//pat/repl} in ner vergleichbar ollen pdksh nicht: $ ksh -c 'echo $KSH_VERSION' @(#)PD KSH v5.2.14 99/07/13.2 $ ksh -c 't=foo.tif.bar.tif; echo "${t/%.tif/.jpg}";' ksh: : bad substitution Der Rest der parameter expansions per ${} scheint aber in POSIX zu sein. Wobei ich nicht weiß, ob aktuelle bash's da noch was ergänzt haben. Ich beschränke mich da gern auf den Stand der bash 2.0.x, bei allem was mehr "will" greift man (oder zumindest ich) sowieso besser zu sed, awk oder gleich perl ;) Und spätestens seit SUSE 10.x ist perl zwingend auf jedem System (Bootloader Installation, guck in deine menu.lst ;). Auch Python ist inzwischen zwingend vorhanden, das war vor ein paar Jahren noch nicht so ;)
Achso: Korrekt dürfte "${datei/%.tif/.jpg}" sein.
In dem Fall schon.
Jau :) Oder eben POSIX: "${t%.tif}.jpg". WWG. Die ash (Bourne- nicht POSIX kompatibel) kennt aber auch das nicht, die sash schon. dash hab ich hier nicht zur Hand. Schlimmer find ich jedenfalls ein Script mit '#!/bin/sh' zu haben, das das explizite bashisms verwendet (die z.B. nichtmal die ksh oder zsh kennen). Hab die Tage irgendein initscript oder so was gesehen, das das macht. In nem Kommentar war explizit von "bash allows us to" die Rede. *grmpf* -dnh -- Love your enemies: they'll go crazy trying to figure out what you're up to. -- BSD fortune file -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 15 Mär 2010, Christian Brabandt schrieb:
On Mo, 15 Mär 2010, David Haller wrote:
Hm. Kannst du mal den Abschnitt aus der manpage angucken (ich komm erst morgen wieder dazu die 11.2 zu booten). Scheint mir ne Änderung oder ein Bug der Bash zu sein, daß ${parameter//%pattern/value} nicht mehr wie gewohnt funktioniert.
Sieht mir auch wie ein Bug aus. Ich teste gelegentlich mal das letzte Release.
,----[ man bash ]- | ${parameter/pattern/string} | Pattern substitution. The pattern is expanded to produce a pat- | tern just as in pathname expansion. Parameter is expanded and | the longest match of pattern against its value is replaced with | string. If pattern begins with /, all matches of pattern are | replaced with string. Normally only the first match is | replaced. If pattern begins with #, it must match at the begin- | ning of the expanded value of parameter. If pattern begins with | %, it must match at the end of the expanded value of parameter. | If string is null, matches of pattern are deleted and the / fol- | lowing pattern may be omitted. If parameter is @ or *, the sub- | stitution operation is applied to each positional parameter in | turn, and the expansion is the resultant list. If parameter is | an array variable subscripted with @ or *, the substitution | operation is applied to each member of the array in turn, and | the expansion is the resultant list. `----
*ARGH* Die Schweine! Die ändern einfach die Syntax (Semantik?). Bisher war's: / erstes Match // alle matches + Modifier: % am Ende # am Anfang (siehe manpage Zitat von mir). Andererseits scheint es im Ergebnis keinen Unterschied zu machen, _SOLANGE_ man eben nicht versucht // mit # oder % zu kombinieren. *grmbl* Danke auch an Ralf. -dnh, der sich wohl mal die Release-Notes angucken sollte, ob's da auftaucht. -- "The only "intuitive" interface is the nipple. After that, it's all learned." -- Bruce Ediger on X interfaces. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am 16. März 2010 03:05 schrieb David Haller
Schlimmer find ich jedenfalls ein Script mit '#!/bin/sh' zu haben, das das explizite bashisms verwendet (die z.B. nichtmal die ksh oder zsh kennen). Hab die Tage irgendein initscript oder so was gesehen, das
Aber es gibt doch nur Linux. :-) Das explodiert inzwischen aber zunehmend auch dort, wenn /bin/sh eine ash ist (z.B. bei Debian). Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Martin! On Di, 16 Mär 2010, Martin Schröder wrote:
Aber es gibt doch nur Linux. :-) Das explodiert inzwischen aber zunehmend auch dort, wenn /bin/sh eine ash ist (z.B. bei Debian). s/ash/dash/
Und dort müssen die Initscripts IIRC portabel sein. Alles andere sind Bugs, die gemeldet gehören. Mit freundlichen Grüßen Christian -- Unter Zeiten Das Perfekt und das Imperfekt tranken Sekt. Sie stießen aufs Futurum an (was man wohl gelten lassen kann). Plusquamper und Exaktfutur blinzten nur. -- Christian Morgenstern -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Montag, 15. März 2010 14:19:41 Ralf Arndt wrote:
Ersetze mal - das doppelte "/" durch ein einfaches - und für erste Tests "rm -i -f" durch echo also for datei in *.tif; do echo "${datei/%.tif/.jpg}"; done
Das wirft Dir dann alle .jpg Dateien aus, zu denen .tif Dateien existieren. Wenn das funktioniert, kannst Du echo wieder durch den rm Befehl ersetzen.
Verkehrt, es wirft alles aus was nicht jpg ist vorher ls > bld.txt p1090037.jpg p1090037.mov p1180001.tif p1180002.jpg p1180002.tif p1180003.jpg p1180003.tif p1180004.jpg p1180004.tif p1180006.jpg p1180006.tif p1180007.jpg p1180007.tif p1180008.jpg p1180016.tif p1180017.jpg p1180017.tif p1180018.jpg p1180018.tif p1180019.jpg p1180020.jpg p1180021.jpg p1180022.jpg p1180023.jpg p1180024.jpg p1180025.jpg p1180026.jpg Thumbs.db nachher for datei in *.tif; do echo "${datei/%.tif/.jpg}"; done >> bld.txt p1180001.jpg p1180002.jpg p1180003.jpg p1180004.jpg p1180006.jpg p1180007.jpg p1180016.jpg p1180017.jpg p1180018.jpg
Grüße Ralf
Alles was nicht jpg ist wurde nicht angeben. (Bzw. gelöscht) Gruß Stefan -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Montag, 15. März 2010 20:11:50 Christian Brabandt wrote:
Hi Ralf!
[....]
Das könnte ein Bug in der bash sein: Das hier funktioniert nicht wie gewünscht for i in *.tif; do rm -i -f -- "${i//%.tif/.jpg}"; done
während das hier funktioniert: for i in *.tif; do rm -i -f -- "${i/%.tif/.jpg}"; done
Das scheint eh ein neues Feature der bash zu sein, weil ich zumindest bisher noch nichts davon gelesen habe, dass man % bzw # bei Pattern substitution benutzen darf. (% erzwingt ein Match am Ende, # am Anfang). Kann natürlich auch sein, dass es bisher einfach nicht vorgesehen ist, Parameter Substitution mittels %/# zu verwenden.
Persönlich würde ich ja eh eher sowas hier benutzen: for i in *.tif; do rm -i -f -- "${i/%.tif}.jpg"; done
Das ist nämlich portabel.
Mit freundlichen Grüßen Christian
jetzt hat es geklappt: stefan@-1c4m:~/bld1> ls > bld.txt stefan@-1c4m:~/bld1> for i in *.tif; do rm -i -f -- "${i/%.tif/.jpg}"; done stefan@-1c4m:~/bld1> ls >> bld.txt stefan@-1c4m:~/bld1> ls > bld.txt p1090037.jpg p1090037.mov p1180001.tif p1180002.jpg p1180002.tif p1180003.jpg p1180003.tif p1180004.jpg p1180004.tif p1180006.jpg p1180006.tif p1180007.jpg p1180007.tif p1180008.jpg p1180016.tif p1180017.jpg p1180017.tif p1180018.jpg p1180018.tif p1180019.jpg p1180020.jpg p1180021.jpg p1180022.jpg p1180023.jpg p1180024.jpg p1180025.jpg p1180026.jpg Thumbs.db ls >> bld.txt p1090037.jpg p1090037.mov p1180001.tif p1180002.tif p1180003.tif p1180004.tif p1180006.tif p1180007.tif p1180008.jpg p1180016.tif p1180017.tif p1180018.tif p1180019.jpg p1180020.jpg p1180021.jpg p1180022.jpg p1180023.jpg p1180024.jpg p1180025.jpg p1180026.jpg Thumbs.db Danke mfg Stefan - --- -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Mittwoch 17 März 2010 08:54 schrieb Stefan Plenert:
On Montag, 15. März 2010 14:19:41 Ralf Arndt wrote:
Ersetze mal - das doppelte "/" durch ein einfaches - und für erste Tests "rm -i -f" durch echo also for datei in *.tif; do echo "${datei/%.tif/.jpg}"; done
Das wirft Dir dann alle .jpg Dateien aus, zu denen .tif Dateien existieren. Wenn das funktioniert, kannst Du echo wieder durch den rm Befehl ersetzen.
Verkehrt, es wirft alles aus was nicht jpg ist
vorher
ls > bld.txt p1090037.jpg p1090037.mov p1180001.tif p1180002.jpg p1180002.tif p1180003.jpg p1180003.tif p1180004.jpg p1180004.tif p1180006.jpg p1180006.tif p1180007.jpg p1180007.tif p1180008.jpg p1180016.tif p1180017.jpg p1180017.tif p1180018.jpg p1180018.tif p1180019.jpg p1180020.jpg p1180021.jpg p1180022.jpg p1180023.jpg p1180024.jpg p1180025.jpg p1180026.jpg Thumbs.db nachher for datei in *.tif; do echo "${datei/%.tif/.jpg}"; done >> bld.txt p1180001.jpg p1180002.jpg p1180003.jpg p1180004.jpg p1180006.jpg p1180007.jpg p1180016.jpg p1180017.jpg p1180018.jpg
Grüße Ralf
Alles was nicht jpg ist wurde nicht angeben. (Bzw. gelöscht)
Argh. Das echo wirft Dir alle .jpg Dateien aus, zu denen .tif Dateien existieren. Da wurde noch nichts gelöscht. Es wurden nur die Namen der Dateien ausgegeben, welche gelöscht werden sollen. Wenn Du jetzt echo durch rm -i ersetzt, werden genau diese jpg Dateien nach Rückfrage gelöscht. Grüße Ralf -- Antworten bitte nur in die Mailingliste! PMs bitte an: listpm (@) arndt-de (.) eu -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Mittwoch, 17. März 2010 09:29:01 Ralf Arndt wrote:
Am Mittwoch 17 März 2010 08:54 schrieb Stefan Plenert:
On Montag, 15. März 2010 14:19:41 Ralf Arndt wrote:
Ersetze mal - das doppelte "/" durch ein einfaches - und für erste Tests "rm -i -f" durch echo also for datei in *.tif; do echo "${datei/%.tif/.jpg}"; done
Das wirft Dir dann alle .jpg Dateien aus, zu denen .tif Dateien existieren. Wenn das funktioniert, kannst Du echo wieder durch den rm Befehl ersetzen.
Verkehrt, es wirft alles aus was nicht jpg ist
vorher
ls > bld.txt p1090037.jpg p1090037.mov p1180001.tif p1180002.jpg p1180002.tif p1180003.jpg p1180003.tif [...] p1180025.jpg p1180026.jpg Thumbs.db nachher for datei in *.tif; do echo "${datei/%.tif/.jpg}"; done >> bld.txt p1180001.jpg p1180002.jpg p1180003.jpg p1180004.jpg p1180006.jpg p1180007.jpg p1180016.jpg p1180017.jpg p1180018.jpg
Grüße Ralf
Alles was nicht jpg ist wurde nicht angeben. (Bzw. gelöscht)
Argh. Das echo wirft Dir alle .jpg Dateien aus, zu denen .tif Dateien existieren. Da wurde noch nichts gelöscht. Es wurden nur die Namen der Dateien ausgegeben, welche gelöscht werden sollen.
Wenn Du jetzt echo durch rm -i ersetzt, werden genau diese jpg Dateien nach Rückfrage gelöscht.
Grüße Ralf
Versthe, hatte jetzt einige Test gemacht: for datei in *.tif; do echo rm -i "${datei//%.tif/.jpg}"; done for datei in *.tif; do echo rm -i "${datei/%.tif/.jpg}"; done for i in *.tif; do echo rm -i "${i//%.tif/.jpg}"; done for i in *.tif; do echo rm -i "${i/%.tif/.jpg}"; done for i in *.tif; do echo rm "${i/%.tif/.jpg}"; done das doppelte "/" durch ein einfaches - dann hat es geklappt. unter echo rm gab es Fehlermeldung, zu 2 tif-Bilder gab es kein jpg-Bilder. Datei oder Ordner nicht gefunden. rm -i hat es ignoriert. ls > bld.txt for datei in *.tif; do echo rm -i "${datei/%.tif/.jpg}"; done >> bldt.txt gibt mir den Ordnerinhalt vor und nach dem löschen aus, ohne zu löschen. rm -i -f -- fand ich keine Auswirkung auf die Ausgabe, nur -i Rückmeldungen bei Fehlern. mfg Stefan -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Mittwoch 17 März 2010 23:03 schrieb Stefan Plenert:
for datei in *.tif; do echo rm -i "${datei//%.tif/.jpg}"; done for datei in *.tif; do echo rm -i "${datei/%.tif/.jpg}"; done
for i in *.tif; do echo rm -i "${i//%.tif/.jpg}"; done for i in *.tif; do echo rm -i "${i/%.tif/.jpg}"; done for i in *.tif; do echo rm "${i/%.tif/.jpg}"; done
Hi Stefan, Ich schrieb in meiner vorherigen Mail auch "ersetzen" und nicht "hinzufügen". Du solltest also _entweder_ das echo verwenden um in der Ausgabe sehen zu können, was der schöne Ausdruck "${i/%.tif/.jpg}" als Ergebnis liefert, _oder_ den rm Befehl verwenden um zu löschen. Dabei ist das "-i" eine Option für rm. In Deiner Kombination kann das nicht funktionieren. Zum Verständnis: echo gibt eine Textzeile aus rm löscht je nach Optionen Dateien und/oder Verzeichnisse. Hier ein Beispiel: 1. Welche Dateien habe ich? ralf@host:~/Test/jpgtest> ll insgesamt 0 -rw-r--r-- 1 ralf users 0 15. Mär 13:55 xyz.jpg -rw-r--r-- 1 ralf users 0 15. Mär 13:55 xyz.tif 2. Welches Ergebnis lifert mir der schöne Ausdruck ralf@host:~/Test/jpgtest> for datei in *.tif; do echo "${datei/%.tif/.jpg}"; done xyz.jpg 3. Die vorige Aktion hat noch nichts verändert: ralf@host:~/Test/jpgtest> ll insgesamt 0 -rw-r--r-- 1 ralf users 0 15. Mär 13:55 xyz.jpg -rw-r--r-- 1 ralf users 0 15. Mär 13:55 xyz.tif 4. Das sah oben gut aus, also lösche ich jetzt ralf@host:~/Test/jpgtest> for datei in *.tif; do rm -i "${datei/%.tif/.jpg}"; done rm: reguläre leere Datei „xyz.jpg“ entfernen? y 5. Es bleibt nur die tif Datei über ralf@host:~/Test/jpgtest> ll insgesamt 0 -rw-r--r-- 1 ralf users 0 15. Mär 13:55 xyz.tif lg Ralf -- Antworten bitte nur in die Mailingliste! PMs bitte an: listpm (@) arndt-de (.) eu -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Mittwoch, 17. März 2010 23:03:38 Stefan Plenert wrote:
On Mittwoch, 17. März 2010 09:29:01 Ralf Arndt wrote:
Am Mittwoch 17 März 2010 08:54 schrieb Stefan Plenert: [...]
Argh. Das echo wirft Dir alle .jpg Dateien aus, zu denen .tif Dateien existieren. Da wurde noch nichts gelöscht. Es wurden nur die Namen der Dateien ausgegeben, welche gelöscht werden sollen.
Wenn Du jetzt echo durch rm -i ersetzt, werden genau diese jpg Dateien nach Rückfrage gelöscht.
Grüße Ralf
Versthe, hatte jetzt einige Test gemacht:
[...]
mfg
Stefan
Doppelte Bilddateien gelößt st@l01:~> alias jpti='for i in *.tif; do echo "${i/%.tif/.jpg}"; done' Versuch die Angabe in eine Alias anzugeben da die Reihenfolg a.jpg a.tif ist alias jpti - zur weiteren Verkürzung 3. Zeichen weggelassen st@l01:~> cd bld1/ st@l01:~/bld1> jpti p1180001.jpg p1180002.jpg p1180003.jpg p1180004.jpg p1180006.jpg p1180007.jpg p1180016.jpg p1180017.jpg p1180018.jpg löschen der alten alias und neue echo gegen rm: st@l01:~/bld1> unalias jpti st@l01:~/bld1> jpti bash: jpti: command not found st@l01:~/bld1> alias jpti='for i in *.tif; do rm -i -f -- "${i/%.tif/.jpg}"; done' st@l01:~/bld1> ls > bld.txt st@l01:~/bld1> jpti st@l01:~/bld1> ls >> bld.txt st@l01:~/bld1> bld.txt (ls > bld.txt) p1090037.jpg p1090037.mov p1180001.tif p1180002.jpg p1180002.tif p1180003.jpg p1180003.tif p1180004.jpg p1180004.tif p1180006.jpg p1180006.tif p1180007.jpg p1180007.tif p1180008.jpg p1180016.tif p1180017.jpg p1180017.tif p1180018.jpg p1180018.tif p1180019.jpg p1180020.jpg p1180021.jpg p1180022.jpg p1180023.jpg p1180024.jpg p1180025.jpg p1180026.jpg Thumbs.db bld.txt ( ls >> bld.txt) p1090037.jpg p1090037.mov p1180001.tif p1180002.tif p1180003.tif p1180004.tif p1180006.tif p1180007.tif p1180008.jpg p1180016.tif p1180017.tif p1180018.tif p1180019.jpg p1180020.jpg p1180021.jpg p1180022.jpg p1180023.jpg p1180024.jpg p1180025.jpg p1180026.jpg Thumbs.db Dankke mfg Stefan --------------- -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Donnerstag, 18. März 2010 09:04:53 Ralf Arndt wrote:
Am Mittwoch 17 März 2010 23:03 schrieb Stefan Plenert:
for datei in *.tif; do echo rm -i "${datei//%.tif/.jpg}"; done for datei in *.tif; do echo rm -i "${datei/%.tif/.jpg}"; done
for i in *.tif; do echo rm -i "${i//%.tif/.jpg}"; done for i in *.tif; do echo rm -i "${i/%.tif/.jpg}"; done for i in *.tif; do echo rm "${i/%.tif/.jpg}"; done
Hi Stefan,
Ich schrieb in meiner vorherigen Mail auch "ersetzen" und nicht "hinzufügen". Du solltest also
_entweder_ das echo verwenden um in der Ausgabe sehen zu können, was der schöne Ausdruck "${i/%.tif/.jpg}" als Ergebnis liefert,
_oder_ den rm Befehl verwenden um zu löschen. Dabei ist das "-i" eine Option für rm.
In Deiner Kombination kann das nicht funktionieren.
Zum Verständnis:
echo gibt eine Textzeile aus
rm löscht je nach Optionen Dateien und/oder Verzeichnisse.
Hier ein Beispiel:
1. Welche Dateien habe ich? ralf@host:~/Test/jpgtest> ll insgesamt 0 -rw-r--r-- 1 ralf users 0 15. Mär 13:55 xyz.jpg -rw-r--r-- 1 ralf users 0 15. Mär 13:55 xyz.tif
2. Welches Ergebnis lifert mir der schöne Ausdruck ralf@host:~/Test/jpgtest> for datei in *.tif; do echo "${datei/%.tif/.jpg}"; done xyz.jpg
3. Die vorige Aktion hat noch nichts verändert: ralf@host:~/Test/jpgtest> ll insgesamt 0 -rw-r--r-- 1 ralf users 0 15. Mär 13:55 xyz.jpg -rw-r--r-- 1 ralf users 0 15. Mär 13:55 xyz.tif
4. Das sah oben gut aus, also lösche ich jetzt ralf@host:~/Test/jpgtest> for datei in *.tif; do rm -i "${datei/%.tif/.jpg}"; done rm: reguläre leere Datei „xyz.jpg“ entfernen? y
5. Es bleibt nur die tif Datei über ralf@host:~/Test/jpgtest> ll insgesamt 0 -rw-r--r-- 1 ralf users 0 15. Mär 13:55 xyz.tif
lg Ralf
Ralf darum ging es mir gar nicht! Es war soviel Fachgesimpel in dem Forum, so dass ich mir nur die Formelvorschläge raussuchte und es selbs an den Vorschlägen versuchte. Woran liegts? / Was funktioniert? // oder / datei oder i rm, rm -i, rm -i -f, rm -i -f -- Welche Lösung ist die beste für mich? Habe mich für Christian Brabant entschieden Datum: 15.03.2010 / 20:11 Das könnte ein Bug in der bash sein: Das hier funktioniert nicht wie gewünscht for i in *.tif; do rm -i -f -- "${i//%.tif/.jpg}"; done während das hier funktioniert: for i in *.tif; do rm -i -f -- "${i/%.tif/.jpg}"; done alias jpti='for i in *.tif; do rm -i -f -- "${i/%.tif/.jpg}"; done' obwohl -f -- nicht notwendig ist, habe ich die Formel komplett übernommen. In der anderen Mail siehste noch mal alles. mfg Stefan ------------ -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (7)
-
Christian Brabandt
-
David Haller
-
Jan Ritzerfeld
-
Martin Deppe
-
Martin Schröder
-
Ralf Arndt
-
Stefan Plenert