sonnenblen.de - Das unabhängige Sun User Forum Der Treffpunkt für Sun-Fans seit 2001
  Übersicht   Forum   Hilfe Suche Einloggen Registrieren   *
Suche
Google
Erweiterte Suche
Willkommen Gast. Bitte einloggen oder registrieren.
23. Mai 2012, 18:07:49

Einloggen mit Benutzername, Passwort und Sitzungslänge
Letzte 5 Shouts:
09. April 2012, 22:24:40
Genau! dir auch noch knappe 35 Minuten Rest-Ostern Wink und denen dies noch vor 0 Uhr lesen ebenso ein frohes Rest-Ostern Wink
08. April 2012, 12:25:29
Falls heute noch jemand hier vorbei schaut: Frohe Ostern!  :-)
14. März 2012, 02:18:10
Wet,Wetter,abgesoffen? Wink *scnr*
21. September 2011, 17:02:09
USENET? - Tolles Ding!
11. September 2011, 15:09:12
Super Wetter!
Spenden
Anzeige
Berechtigungen

Anzeige
Seiten: [1]   Nach unten
  Drucken  
Autor Thema: mehrere hundert Files verschieben  (Gelesen 3863 mal)
hotrod
Gast
« am: 15. November 2007, 11:23:43 »

Hallo,

ich muss einige hundert Files aus einem Ordner verschieben welche alle unterschiedliche namen tragen. Ich möchte diese nach dem Datum zusammengefasst verschieben (also z.B. alle files vom 31.Oktober 2007). Kann mir jemand helfen wie ich dies hinkriege?

Gruss Stephan
Gespeichert
sonnenblen.de - Das unabhängige Sun User Forum
« am: 15. November 2007, 11:23:43 »

 Gespeichert
hotrod
Gast
« Antworten #1 am: 15. November 2007, 11:42:32 »

so, einen kleinen schritt bin ich schon weiter:

find . '*.*' -type f -mtime +14 -exec ls -ltr {} \;

listet alle files in dem Ordner auf die älter als 14Tg. sind... jetz muss ich die nur noch irgendwie mv können..
Gespeichert
hotrod
Gast
« Antworten #2 am: 15. November 2007, 12:08:51 »

ok, habs rausgefunden  Grin

find . '*.*' -type f -mtime +13 -exec mv  {} /<zielverzeichnis>  \;
Gespeichert
escimo
Sobl Guru
*****
Offline Offline

Beiträge: 1435


eiskaltes Unwissen


« Antworten #3 am: 15. November 2007, 15:45:58 »

Da sollte auch ein einfaches find ohne '*.*' reichen.

find . -name "*" ...
bringt dir keine versteckten Dateien.

find . -name "*.*" -type ...
bringt dir alle Dateien in allen Verzeichnissen vom aktuellen Arbeitsverzeichnis ("find ." aus)
Gespeichert
Padde
Sobl Bachelor
***
Offline Offline

Beiträge: 134


Hier könnte Ihre Werbung stehen!


« Antworten #4 am: 15. November 2007, 17:09:33 »

find . -name "*.*" -type ...
bringt dir alle Dateien in allen Verzeichnissen vom aktuellen Arbeitsverzeichnis ("find ." aus)

Bei dieser Variante werden nur Dateien erfasst, die mindestens einen Punkt im Dateinamen enthalten. Will man ausnahmslos alle Dateien erfassen, läßt man einfach -name ... weg. Korrekt wäre:

Code:
find . -type f -mtime +13 -exec mv {} /<zielverzeichnis>  \;

Bei sehr vielen Dateien kann es aber Probleme geben, da die maximale Länge einer Kommandozeile beschränkt ist. Dann hilft xargs(1) weiter.
Gespeichert
sonnenblen.de - Das unabhängige Sun User Forum
« Antworten #4 am: 15. November 2007, 17:09:33 »

 Gespeichert
escimo
Sobl Guru
*****
Offline Offline

Beiträge: 1435


eiskaltes Unwissen


« Antworten #5 am: 15. November 2007, 17:35:43 »

Ja hast recht. Das Suchmuster "*.*" sucht nur die Dateien, die eine Punkt im Dateinamen enthalten. "Altsheimer lässt grüßen."  Roll Eyes
Gespeichert
Ten Little Indyans
Sobl Bachelor
***
Offline Offline

Beiträge: 209


« Antworten #6 am: 15. November 2007, 21:47:25 »


Code:
find . -type f -mtime +13 -exec mv {} /<zielverzeichnis>  \;

Bei sehr vielen Dateien kann es aber Probleme geben, da die maximale Länge einer Kommandozeile beschränkt ist. Dann hilft xargs(1) weiter.

 Huh

Wo spielt da die Länge der Kommandozeile eine Rolle? Der Befehl mv wird für jeden Treffer einmal aufgerufen, wobei dessen Name anstelle von {} erscheint.

Wenn also 10000 Dateien gefunden werden dann wird 10000 mal mv aufgerufen, jeweils als "mv <dateiname> /<zielverzeichnis>".

Sämtliche xargs-Beispiele die ich kenne benutzen find mit -print. Ich habe bis heute nicht verstanden was daran besser sein soll als -exec {}.
Gespeichert
meik
Sobl Bachelor
***
Offline Offline

Beiträge: 187


« Antworten #7 am: 16. November 2007, 10:54:44 »

Sämtliche xargs-Beispiele die ich kenne benutzen find mit -print. Ich habe bis heute nicht verstanden was daran besser sein soll als -exec {}.

Der Vorteil ist halt, dass du nicht mv für jede Datei einzeln aufrufst, sondern im Idealfall für alle Dateien zusammen nur einmal. Limit ist da nur die maximal mögliche Länge der Befehlszeile. Damit spart man halt das exzessive Starten von neuen Prozessen.

Der Nachteil von -print und xargs ist dass Handling von Leer- und anderen Sonderzeichen. Dafür gibt es ja  bei den GNU-Pendands -print0 und "xargs -0", um ein \0 als Trennzeichen zu nehmen.
Gespeichert
Ten Little Indyans
Sobl Bachelor
***
Offline Offline

Beiträge: 209


« Antworten #8 am: 16. November 2007, 12:12:45 »

Sämtliche xargs-Beispiele die ich kenne benutzen find mit -print. Ich habe bis heute nicht verstanden was daran besser sein soll als -exec {}.

Der Vorteil ist halt, dass du nicht mv für jede Datei einzeln aufrufst, sondern im Idealfall für alle Dateien zusammen nur einmal. Limit ist da nur die maximal mögliche Länge der Befehlszeile. Damit spart man halt das exzessive Starten von neuen Prozessen.

Solche Fragen sind immer ein willkommener Anlass das eigene Wissen aufzufrischen... Grin

xargs weiss also wie lang die Befehlszeile auf einem System sein darf. Man übergibt das auszuführende Kommando sowie möglicherweise ein paar "initial arguments" und dann füllt xargs die Befehlszeile bis zum Anschlag mit Werten vom Standard Input, und zwar so oft bis alles abgearbeitet ist.

Damit ist xargs aber für diesen konkreten Einsatzfall (mv) trotzdem nicht zu gebrauchen, da zusätzliche Parameter nur vor den Dateinamen kommen können.

Man könnte jetzt natürlich ein Einzeiler-Zwischenskript aufsetzen mit "mv $* /<zielverzeichnis>" und dieses von xargs aufrufen lassen. Dabei hat man aber das Problem dass man nicht genau weiss wieviel Platz einem in der Befehlszeile noch bleibt. Wenn xargs sie wirklich voll macht und für das Zielverzeichnis kein Platz bleibt dann knallt es trotzdem...

Gespeichert
meik
Sobl Bachelor
***
Offline Offline

Beiträge: 187


« Antworten #9 am: 16. November 2007, 13:20:31 »

Solche Fragen sind immer ein willkommener Anlass das eigene Wissen aufzufrischen... Grin

Stimmt! :-)

Zitat
xargs weiss also wie lang die Befehlszeile auf einem System sein darf. Man übergibt das auszuführende Kommando sowie möglicherweise ein paar "initial arguments" und dann füllt xargs die Befehlszeile bis zum Anschlag mit Werten vom Standard Input, und zwar so oft bis alles abgearbeitet ist.

Genau. Das hängt ganz vom System ab, ob es da eine globale Einschränkung gibt, oder ob xargs sich selber da auf einen sinnvollen Wert (64k anymore?) beschränkt. Wie das konkret aussieht, kann ich dir auch nicht sagen.

Zitat
Damit ist xargs aber für diesen konkreten Einsatzfall (mv) trotzdem nicht zu gebrauchen, da zusätzliche Parameter nur vor den Dateinamen kommen können.

Ja, das stimmt. Grundsätzlich kann xargs auch mit Platzhaltern wie das {} bei "find -exec" arbeiten, allerdings sehe ich auch gerade in der Doku, dass dann immer nur ein Parameter auf einmal abgearbeitet wird.

Zitat
Man könnte jetzt natürlich ein Einzeiler-Zwischenskript aufsetzen mit "mv $* /<zielverzeichnis>" und dieses von xargs aufrufen lassen. Dabei hat man aber das Problem dass man nicht genau weiss wieviel Platz einem in der Befehlszeile noch bleibt. Wenn xargs sie wirklich voll macht und für das Zielverzeichnis kein Platz bleibt dann knallt es trotzdem...

Ja, da könnte man noch einiges an Gehirnschmalz reinstecken (du kannst z.B. xargs die maximale Länge mitgeben und so Platz schaffen oder in dem Script nochmal xargs aufrufen), aber das macht wohl nur Sinn, wenn man wirklich Performance-Probleme hat. Für einmalige Aktionen lohnt das den Aufwand nicht, außer man verbucht das unter "Weiterbildung". ;-)
Gespeichert
sonnenblen.de - Das unabhängige Sun User Forum
« Antworten #9 am: 16. November 2007, 13:20:31 »

 Gespeichert
Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC
TinyPortal v0.9.8 © Bloc
Prüfe XHTML 1.0 Prüfe CSS
sonnenblen.de, mood-indigo.org, unixforum.net und realcomputers.org sind Projekte der steinbruch.info GbR

Google war zuletzt hier 28. April 2012, 05:28:11