find -exec

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
KingBonecrusher
Beiträge: 375
Registriert: 07.06.2005 09:48:43

find -exec

Beitrag von KingBonecrusher » 01.04.2008 12:23:35

Habe versucht paar Dateien zu suchen. Diese will ich dann auf einen 2ten Datenträger kopieren, jedoch soll der Dateiname eine Zufallszahl sein, daher eigentlich:

Code: Alles auswählen

find daten/ -iname *doc* -exec cp {} $RANDOM \;
Jedoch ist es so,als ob die Systemvariable $RANDOM nur einmal aufgelöst wird. Ich habe nur eine Datei.

Folgendes klappt ohne weitere Probleme, jedoch mir dem originalen Namen

Code: Alles auswählen

find daten/ -iname *doc* -exec cp {} . \;

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: find -exec

Beitrag von finupsen » 01.04.2008 13:13:09

hallo,

evtl. so ... ?

Code: Alles auswählen

IFS='\n'
for i in `find ~/ -name '*.doc'`;do 
 echo cp $i `date +%s$i|md5sum|cut -b -32` 
done
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: find -exec

Beitrag von cosmac » 01.04.2008 13:16:58

hi,

du müsstest den cp-Befehl in einer eigenen Shell ausführen:

Code: Alles auswählen

find daten/ -iname *doc* -exec bash -c 'cp {} $RANDOM' \;
$RANDOM hat aber zwei Nachteile:
- es funktioniert nicht in der dash
(die künftige Debian-Standard-Shell)
- die Zahlen können doppelt vorkommen
(dann gehen einzelne Dateien verloren)

Gegen beides hilft "mktemp", dann sieht's so aus:

Code: Alles auswählen

find daten/ -iname *doc* -exec sh -c 'cp -p {} `mktemp XXXXXXXXX`' \;
die XXX müssen genauso da stehen, die bestimmen die Länge
des neuen Namens; weniger als 9 sollten es nicht sein, weil
die aktuelle PID drin vorkommt.

Ob du mit "cp -p" das Datum der Datei behalten möchtest,
musst du selber wissen.
Beware of programmers who carry screwdrivers.

Antworten