Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Dateien verschieben

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
fuwa
Newbie
Newbie
Beiträge: 16
Registriert: 18. Jan 2005, 10:19

Dateien verschieben

Beitrag von fuwa »

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
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

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: Alles auswählen

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
fuwa
Newbie
Newbie
Beiträge: 16
Registriert: 18. Jan 2005, 10:19

Beitrag von fuwa »

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
Benutzeravatar
snaewe
Hacker
Hacker
Beiträge: 415
Registriert: 13. Dez 2004, 16:32
Wohnort: Zu Hause

Beitrag von snaewe »

fuwa hat geschrieben: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: Alles auswählen

find /data/test  -name "*.gif" -amin -5 -exec cp \{\} /data/produktiv \;
TIPP: Ein '-exec echo cp \{\}.....' hilft zum Testen.

Stefan
Der Name Windows stammt ursprünglich aus dem Indianischen und
bedeutet: "Weißer Mann, der auf eine Sanduhr starrt."
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

snaewe hat geschrieben:
fuwa hat geschrieben: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: Alles auswählen

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: Alles auswählen

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: Alles auswählen

find /data/test/.  -name "*.gif" -amin -5 -exec mv -v {} /data/produktiv \;
fuwa
Newbie
Newbie
Beiträge: 16
Registriert: 18. Jan 2005, 10:19

Beitrag von fuwa »

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
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

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?
- ...
fuwa
Newbie
Newbie
Beiträge: 16
Registriert: 18. Jan 2005, 10:19

Beitrag von fuwa »

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
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

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

Code: Alles auswählen

rsync -av --include "*/" --include "*.gif" --exclude "*" /data/test/ /data/produktiv
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

oder mit GUI: dirsync

http://freshmeat.net/projects/dirsync/
bzw als SuSE-RPM hier:
http://ftp.gwdg.de/pub/linux/suse/apt/S ... er-oc2pus/
http://ftp.gwdg.de/pub/linux/suse/apt/S ... er-oc2pus/
oder
apt install dirsync (Repository suser-oc2pus)
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
Benutzeravatar
snaewe
Hacker
Hacker
Beiträge: 415
Registriert: 13. Dez 2004, 16:32
Wohnort: Zu Hause

Beitrag von snaewe »

@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
Der Name Windows stammt ursprünglich aus dem Indianischen und
bedeutet: "Weißer Mann, der auf eine Sanduhr starrt."
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

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 \{\} ...
Antworten