Hallo, habe in verschiedenen Unterordnern tif-Bilddateien liegen. Teilweise haben diese Dateien gleiche Namen. Ich möchte diese Dateien alle finden und mit einmaligem Namen in ein anderes Verzeichnis kopieren: find . -iname '*.tif' -exec cp -v {} $(mktemp --tmpdir=../desktop_hintergrund_zentrum/).tif \; Ergebnis ist: `./Genes & Associates/Slide1.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide10.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide11.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide12.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide13.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide14.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide2.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' ... es werden alle Dateien mit gleichem Zielnamen kopiert. Man find sagt zu --exec command: "The specified command is run once for each matched file" Also müsste mktemp doch jedes mal neu aufgerufen werden, und mir einen anderen Dateinamen generieren. Wieso macht es das nicht ? Bernd -- Bernd Lentes Systemadministration Institut für Entwicklungsgenetik HelmholtzZentrum münchen bernd.lentes@helmholtz-muenchen.de phone: +49 89 3187 1241 fax: +49 89 3187 3826 http://www.helmholtz-muenchen.de/idg Aufsichtsratsvorsitzende: MinDir'in Bärbel Brumme-Bothe Geschäftsführer: Prof. Dr. Günther Wess und Dr. Nikolaus Blum Registergericht: Amtsgericht München HRB 6466 Zeit ist keine Schnellstrasse zwischen Wiege und Grab, sondern Platz zum Parken in der Sonne -- 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 Thu, Nov 11, 2010 at 03:36:36PM +0100, Lentes, Bernd wrote:
Hallo,
habe in verschiedenen Unterordnern tif-Bilddateien liegen. Teilweise haben diese Dateien gleiche Namen. Ich möchte diese Dateien alle finden und mit einmaligem Namen in ein anderes Verzeichnis kopieren:
find . -iname '*.tif' -exec cp -v {} $(mktemp --tmpdir=../desktop_hintergrund_zentrum/).tif \;
Ergebnis ist:
`./Genes & Associates/Slide1.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide10.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide11.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide12.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide13.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide14.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' `./Genes & Associates/Slide2.tif' -> `../desktop_hintergrund_zentrum/tmp.q8CldaUAD3.tif' ...
es werden alle Dateien mit gleichem Zielnamen kopiert. Man find sagt zu --exec command:
"The specified command is run once for each matched file" Also müsste mktemp doch jedes mal neu aufgerufen werden, und mir einen anderen Dateinamen generieren. Wieso macht es das nicht ?
mktemp braucht XXXXXXX (6 X) im Filenamen um wechselnde Dateinamen zu erzeugen. Evt sogar am Ende des Namens. Ciao, Marcus -- 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
Marcus Meissner schrieb:
On Thu, Nov 11, 2010 at 03:36:36PM +0100, Lentes, Bernd wrote:
...
es werden alle Dateien mit gleichem Zielnamen kopiert. Man find sagt zu --exec command:
"The specified command is run once for each matched file" Also müsste mktemp doch jedes mal neu aufgerufen werden, und mir einen anderen Dateinamen generieren. Wieso macht es das nicht ?
mktemp braucht XXXXXXX (6 X) im Filenamen um wechselnde Dateinamen zu erzeugen. Evt sogar am Ende des Namens.
Hmm, dann dürfte das ja eigentlich nicht gehen: # mktemp --tmpdir=../desktop_hintergrund_zentrum/ ../desktop_hintergrund_zentrum/tmp.ZVbh21nzrK # mktemp --tmpdir=../desktop_hintergrund_zentrum/ ../desktop_hintergrund_zentrum/tmp.1erfw37laj # mktemp --tmpdir=../desktop_hintergrund_zentrum/ ../desktop_hintergrund_zentrum/tmp.LkRtgxbF4d # mktemp --tmpdir=../desktop_hintergrund_zentrum/ ../desktop_hintergrund_zentrum/tmp.tHj4Fyv7cm Da legt mktemp ohne XXXXXX wechselnde Dateinamen an. Mit XXXXXX probiert: find . -iname '*.tif' -exec cp -v {} $(mktemp --tmpdir=../desktop_hintergrund_zentrum/ tmp.XXXXXXXXXX).tif \; `./Genes & Associates/Slide1.tif' -> `../desktop_hintergrund_zentrum/tmp.yS4SbrWTPm.tif' `./Genes & Associates/Slide10.tif' -> `../desktop_hintergrund_zentrum/tmp.yS4SbrWTPm.tif' `./Genes & Associates/Slide11.tif' -> `../desktop_hintergrund_zentrum/tmp.yS4SbrWTPm.tif' `./Genes & Associates/Slide12.tif' -> `../desktop_hintergrund_zentrum/tmp.yS4SbrWTPm.tif' `./Genes & Associates/Slide13.tif' -> `../desktop_hintergrund_zentrum/tmp.yS4SbrWTPm.tif' `./Genes & Associates/Slide14.tif' -> `../desktop_hintergrund_zentrum/tmp.yS4SbrWTPm.tif' `./Genes & Associates/Slide2.tif' -> `../desktop_hintergrund_zentrum/tmp.yS4SbrWTPm.tif' `./Genes & Associates/Slide3.tif' -> `../desktop_hintergrund_zentrum/tmp.yS4SbrWTPm.tif' `./Genes & Associates/Slide4.tif' -> `../desktop_hintergrund_zentrum/tmp.yS4SbrWTPm.tif' `./Genes & Associates/Slide5.tif' -> `../desktop_hintergrund_zentrum/tmp.yS4SbrWTPm.tif' `./Genes & Associates/Slide6.tif' -> `../desktop_hintergrund_zentrum/tmp.yS4SbrWTPm.tif' klappt leider immer noch nicht. Bernd-- 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 Donnerstag, 11. November 2010, 15:36:36 schrieb Lentes, Bernd:
Hallo,
habe in verschiedenen Unterordnern tif-Bilddateien liegen. Teilweise haben diese Dateien gleiche Namen. Ich möchte diese Dateien alle finden und mit einmaligem Namen in ein anderes Verzeichnis kopieren:
find . -iname '*.tif' -exec cp -v {} $(mktemp --tmpdir=../desktop_hintergrund_zentrum/).tif \;
[...]
es werden alle Dateien mit gleichem Zielnamen kopiert. Man find sagt zu --exec command:
"The specified command is run once for each matched file" Also müsste mktemp doch jedes mal neu aufgerufen werden, und mir einen anderen Dateinamen generieren. Wieso macht es das nicht ?
weil mktemp nur EINMAL aufgerufen wird, wenn die bash deine eingabezeile analysiert... also BEVOR find überhaupt loslegt. bye, MH -- 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
Matthias Homann schrieb:
Am Donnerstag, 11. November 2010, 15:36:36 schrieb Lentes, Bernd:
Hallo,
habe in verschiedenen Unterordnern tif-Bilddateien liegen. Teilweise haben diese Dateien gleiche Namen. Ich möchte diese Dateien alle finden und mit einmaligem Namen in ein anderes Verzeichnis kopieren:
find . -iname '*.tif' -exec cp -v {} $(mktemp --tmpdir=../desktop_hintergrund_zentrum/).tif \;
[...]
es werden alle Dateien mit gleichem Zielnamen kopiert. Man find sagt zu --exec command:
"The specified command is run once for each matched file" Also müsste mktemp doch jedes mal neu aufgerufen werden, und mir einen anderen Dateinamen generieren. Wieso macht es das nicht ?
weil mktemp nur EINMAL aufgerufen wird, wenn die bash deine eingabezeile analysiert... also BEVOR find überhaupt loslegt.
Hallo, Du hast recht. Es liegt wohl an der Kommandosubstitution $(command), die nur einmal ausgeführt wird. Das folgende funktioniert: find . -iname '*.tif' -exec mktemp --tmpdir=../desktop_hintergrund_zentrum/ \; ../desktop_hintergrund_zentrum/tmp.jeDZI1qOsO ../desktop_hintergrund_zentrum/tmp.SA41OSHidD ../desktop_hintergrund_zentrum/tmp.pKKd1C9YYL ../desktop_hintergrund_zentrum/tmp.r5suTHLteW ../desktop_hintergrund_zentrum/tmp.QV4htqesDg ../desktop_hintergrund_zentrum/tmp.V4u3W1XCA8 ../desktop_hintergrund_zentrum/tmp.IcyUBKa5Kt ../desktop_hintergrund_zentrum/tmp.0WxdexcZme ../desktop_hintergrund_zentrum/tmp.7etOCn2RMl ... Aber wie kriege ich mein Problem gelöst ? Bernd-- 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 11.11.2010 16:10, schrieb Lentes, Bernd: Hallo zusammen,
Matthias Homann schrieb:
Am Donnerstag, 11. November 2010, 15:36:36 schrieb Lentes, Bernd:
Hallo,
habe in verschiedenen Unterordnern tif-Bilddateien liegen. Teilweise haben diese Dateien gleiche Namen. Ich möchte diese Dateien alle finden und mit einmaligem Namen in ein anderes Verzeichnis kopieren:
find . -iname '*.tif' -exec cp -v {} $(mktemp --tmpdir=../desktop_hintergrund_zentrum/).tif \;
[...]
es werden alle Dateien mit gleichem Zielnamen kopiert. Man find sagt zu --exec command:
"The specified command is run once for each matched file" Also müsste mktemp doch jedes mal neu aufgerufen werden, und mir einen anderen Dateinamen generieren. Wieso macht es das nicht ?
weil mktemp nur EINMAL aufgerufen wird, wenn die bash deine eingabezeile analysiert... also BEVOR find überhaupt loslegt.
Hallo,
Du hast recht. Es liegt wohl an der Kommandosubstitution $(command), die nur einmal ausgeführt wird. Das folgende funktioniert:
find . -iname '*.tif' -exec mktemp --tmpdir=../desktop_hintergrund_zentrum/ \; ../desktop_hintergrund_zentrum/tmp.jeDZI1qOsO ../desktop_hintergrund_zentrum/tmp.SA41OSHidD ../desktop_hintergrund_zentrum/tmp.pKKd1C9YYL ../desktop_hintergrund_zentrum/tmp.r5suTHLteW ../desktop_hintergrund_zentrum/tmp.QV4htqesDg ../desktop_hintergrund_zentrum/tmp.V4u3W1XCA8 ../desktop_hintergrund_zentrum/tmp.IcyUBKa5Kt ../desktop_hintergrund_zentrum/tmp.0WxdexcZme ../desktop_hintergrund_zentrum/tmp.7etOCn2RMl ...
Aber wie kriege ich mein Problem gelöst ?
ich mag zwar komplett daneben liegen, aber warum nicht etwas wie for i in `find . -iname '*.tif'`; do mktemp bla $i; done ? Georg -- georg schilling systemhaus SAR gmbh tel: +49 2401 9195-33 http://www.sar.de arnold-sommerfeld-ring 27 fax: +49 2401 9195-66 52499 baesweiler amtsgericht aachen - hrb. 5729 - gf hans-juergen schenkelberg ----------------------------------------------------------------------- - IT-Projekte mit M.O.T.I.vation sicher zum Erfolg führen: www.sar.de - ----------------------------------------------------------------------- !DSPAM:245,4cdc0d2026272137028112! -- 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
Georg Schilling schrieb:
Am 11.11.2010 16:10, schrieb Lentes, Bernd:
Aber wie kriege ich mein Problem gelöst ?
ich mag zwar komplett daneben liegen, aber warum nicht etwas wie
for i in `find . -iname '*.tif'`; do mktemp bla $i; done ?
Georg --
Hallo Georg, danke, klappt. "for i in `find . -iname '*.tif'`; do cp -v $i $(mktemp --tmpdir=../desktop_hintergrund_zentrum/).tif ; done" Bernd-- 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 Bernd, On Thursday 11 November 2010 17:13:16 Lentes, Bernd wrote:
danke, klappt
Ausser du findest Files mit "seltsamen" Zeichen darin. Sollte das ein Script fuer die Ewigkeit werden, dann besser gleich diesen Fall mit abdecken: find . -name '*.tif' -print0 | \ while read -d $'\0' file do echo mv "$file" $(mktemp --tmpdir=../desktop_hintergrund_zentrum/).tiff done Roman -- Roman Fietze Telemotive AG Buero Muehlhausen Breitwiesen 73347 Muehlhausen Tel.: +49(0)7335/18493-45 http://www.telemotive.de -- 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 Fri, November 12, 2010 7:15 am, Roman Fietze wrote:
Ausser du findest Files mit "seltsamen" Zeichen darin.
Richtig. Leerzeichen oder "\n" sind solche Fälle. Robust ist was anderes.
Sollte das ein Script fuer die Ewigkeit werden, dann besser gleich diesen Fall mit abdecken:
find . -name '*.tif' -print0 | \ while read -d $'\0' file
read -d $'\0' und find -print0 ist leider nicht portabel, sondern sind Gnu bzw. bash Erweiterungen. Dazu kommt, dass man noch mindestens -r bei read möchte, weil sonst backslashes verloren gehen. Portabler ist die gepostete find -exec Lösung. Grüße, 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
On Thu, November 11, 2010 4:34 pm, Georg Schilling wrote:
ich mag zwar komplett daneben liegen, aber warum nicht etwas wie
for i in `find . -iname '*.tif'`; do mktemp bla $i; done
Weil das bei Leerzeichen im Dateinamen auf die Schnauze fliegt? Weil die Variablen nicht gequotet sind? Weil es unschön aussieht? Besser: find . -iname "*.tif" -exec sh -c 'for i; do cp -v "$i" "$(mktemp)".jpg; done' sh '{}' + Grüße, Christian, find-fan -- 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 (6)
-
Christian Brabandt
-
Georg Schilling
-
Lentes, Bernd
-
Marcus Meissner
-
Mathias Homann
-
Roman Fietze