• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Dateien verschieben

fuwa

Newbie
Hallo,
hätte ne kleine Frage zum Verschieben von Dateien:
Wie mache ich es, dass alle neueren Dateien mit der Extension *.gif aus dem Verzeichnis /data/test ins Verzeichnis /data/produktiv verschoben werden? Die Daten liegen in verschiedenen Verzeichnisebenen.

Danke Markus
 

TeXpert

Guru
was bedeutet neuer? sollen also ältere gifs im Verzeichnis bleiben?

im allgemeinen würde ich hier mit find die Liste der Dateien aufstellen. also in der Form:
Code:
find /data/test  -name "*.gif" [hier kommt noch was] -exec mv {} /data/produktiv \;

so jetzt kommen die Details:
wenn es unterverzeichnisse gibt und die ignoriert werden sollen ein -maxdepth 1

jetzt zu dem Alter hier sind -amin, -atime, -cmin, -ctime, -mmin und -mtime zu nennen, Details gibts mit man find
 
OP
F

fuwa

Newbie
Habe folgendes probiert:
find /data/test -name "*.gif" -amin -5 -exec cp {} /data/produktiv \;

es passiert allerdings überhaupt nichts, wenn ich nur den Suchteil ausführe (find /data/test -name "*.gif" -amin -5) listet er mir alle gewünschten Dateien auf.
Es werden beim gesamten Befehl allerdings keine Dateien verschoben.
Was mache ich falsch?

Danke Markus
 

snaewe

Hacker
fuwa schrieb:
Habe folgendes probiert:
find /data/test -name "*.gif" -amin -5 -exec cp {} /data/produktiv \;
Die '{ }' Klammern müssen auf jeden Fall 'Escaped' werden, also:
Code:
find /data/test  -name "*.gif" -amin -5 -exec cp \{\} /data/produktiv \;

TIPP: Ein '-exec echo cp \{\}.....' hilft zum Testen.

Stefan
 

TeXpert

Guru
snaewe schrieb:
fuwa schrieb:
Habe folgendes probiert:
find /data/test -name "*.gif" -amin -5 -exec cp {} /data/produktiv \;
Die '{ }' Klammern müssen auf jeden Fall 'Escaped' werden, also:
Code:
find /data/test  -name "*.gif" -amin -5 -exec cp \{\} /data/produktiv \;

sorry aber das ist quatsch, die müssen nicht escaped werden. {} wird von find durch den aktuellen Namen ersetzt, jetzt zu dem Problem:

wenn Du was sehen willst ->
Code:
find /data/test  -name "*.gif" -amin -5 -exec cp -v {} /data/produktiv \;

wobei cp die Dateien halt nur Kopiert! wenn die verschoben werden sollen -> mv hier ist jetzt aber vorsicht mit den Verzeichnissen, also:
Code:
find /data/test/.  -name "*.gif" -amin -5 -exec mv -v {} /data/produktiv \;
 
OP
F

fuwa

Newbie
Das kopieren/verschieben klappt jetzt aber es werden alle Dateien ind das selbe Verzeichnis /data/produktiv verschoben es soll aber die selbe Verzeichnisstruktur wie in /data/test übernommen werden.

Ich wäre euch sehr dankbar wenn ihr mir nochmals weiterhelfen könntet.

Vielen dank für die bisherigen Tipps.
Gruß Markus
 

TeXpert

Guru
das ist doch ein ganz anderes Problem :( musst auch gleich sagen, ohne konkretes Problem keine konkrete Lösung.

Das Problem ist, dass Du nur ein Kopierziel angibst bei diesem einfachen mv oder cp da Du aber mit find verschiedene Verzeichnisse bekommst wird das so nix.

Jetzt nochmal:
- kompletten Baum auf einen anderen Kopieren?
- was steht im Quellbaum drin? nur die gifs oder auch andere Daten?
- ...
 
OP
F

fuwa

Newbie
Sorry.
Es sieht so aus dass unter /data/test und unter /data/produktiv jeweil ein gesamtes (größtenteil identisch) Webverzeichnis liegt. Auf test wird nun entwickelt und getestet. Sind die Tests in Ordnung sollen aus Test nur die gifs und jsps (keine Propertie Dateien oder *.class Dateien) die geändert wurden ins Verzeichnis produktiv kopiert werden.

Danke für die Antworten
Gruß Markus
 

TeXpert

Guru
also Du willst immer die neueren gifs aus test in produktiv verschieben also die gifs synchronisieren, dann nimm rsync:

Code:
rsync -av --include "*/" --include "*.gif" --exclude "*" /data/test/ /data/produktiv
 

oc2pus

Ultimate Guru
oder mit GUI: dirsync

http://freshmeat.net/projects/dirsync/
bzw als SuSE-RPM hier:
http://ftp.gwdg.de/pub/linux/suse/apt/SuSE/9.2-i386/RPMS.suser-oc2pus/
http://ftp.gwdg.de/pub/linux/suse/apt/SuSE/9.1-i386/RPMS.suser-oc2pus/
oder
apt install dirsync (Repository suser-oc2pus)
 

snaewe

Hacker
@TeXpert:
Ganz so'n Quatsch scheint das mit den 'Escaped'en {} nicht zu sein (aus 'info find'):
3.3.1 Single File
-----------------

Here is how to run a command on one file at a time.

-- Action: -exec command ;
Execute COMMAND; true if 0 status is returned. `find' takes all
arguments after `-exec' to be part of the command until an
argument consisting of `;' is reached. It replaces the string
`{}' by the current file name being processed everywhere it occurs
in the command. Both of these constructions need to be escaped
(with a `\') or quoted to protect them from expansion by the shell.
The command is executed in the directory in which `find' was run.

For example, to compare each C header file in the current
directory with the file `/tmp/master':

find . -name '*.h' -exec diff -u '{}' /tmp/master ';'
Aber Du hast recht. Es geht auch ohne. Warum nur?

Stefan
 

TeXpert

Guru
very strange :shock:

ich hatte noch nie Probleme ohne Escapes bei den {} beim Semikolon ist das ja klar hmmmm evtl. trifft das für nicht bashs zu, aber ich hab gerade mal in "UNIX POWER TOOLS" nachgeblättert, die machen auch alles ohne \{\} ...
 
Oben