Moderatorschrecker
Anmeldungsdatum: 3. August 2014
Beiträge: 188
|
Hallo.
Bitte macht es mir nicht zu schwer, ich bin Anfänger im Programmieren, insbesondere Shell.
Mein Problem: ich habe auf meinem Computer
Linux andy-desktop 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
und auch SD Card mehrere *.sh Dateien, und dass in verschiedene Ordnern. Ich möchte die *.sh Dateien sortieren, und zwar nach alter. Die jüngsten (also bearbeiteten) sollen nach oben (SD Card) die ältesten tief im Dateisystem ( SD Card) bewegt werden. Was ich trotzt Quellenstudium im Wiki, find nicht lösen konnte. Ich fand nur die "Änderungszeit in Tagen". Die aber meinem Problem nicht entspricht. Wie kann ich mein Problem lösen? ich hoffe auf eure Hilfe.
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21725
Wohnort: Lorchhausen im schönen Rheingau
|
Auch hier die Frage: Was ist dein konkretes Ziel? und dmait meine ich nicht den einzelnen Schritt des Umsortierens, sondern was willst Du damit erreichen? Richtig fragen kennst Du ja bereits, bitte beachte es nun endlich auch.
|
jug
Ehemalige
Anmeldungsdatum: 19. März 2007
Beiträge: 12335
Wohnort: Berlin
|
Moderatorschrecker schrieb: und auch SD Card mehrere *.sh Dateien, und dass in verschiedene Ordnern. Ich möchte die *.sh Dateien sortieren, und zwar nach alter. Die jüngsten (also bearbeiteten) sollen nach oben (SD Card) die ältesten tief im Dateisystem ( SD Card) bewegt werden.
Kannst du das etwas ausführlicher beschreiben, wo sollen die Dateien hin? Was meinst du mit oben und unten im Dateisystem? Hast du ein Beispiel? Wenn sie alle in einem Verzeichnis wären, dann würde ich die mit ls -c einfach nach Datum sortiert ausgeben lassen. Aber anscheinend hast du ja eine Verzeichnisstruktur – ich bin mir nur noch nicht ganz klar, ob diese Verzeichnisstruktur für deine Bedürfnisse auch sinnvoll ist. Ich kann nur immer wieder betonen, wie wichtig es ist, dass du uns auch den Zweck deines Vorhabens mitteilst, denn manchmal gibt es schon fertige Programme die genau für den Anwendungsfall gemacht wurde. ~jug
|
Moderatorschrecker
(Themenstarter)
Anmeldungsdatum: 3. August 2014
Beiträge: 188
|
ls -c könnte schon richtig sein. Um dein kleines Sniplet zu testen brauch ich ein wenig Zeit, da ich gerade am Android Tablett bin, und dort habe ich keine Konsole! Wenn es nicht zufiel gefordert ist. Das Sript-snipplet soll selbstaendig das gesamte Dateisystem der SD Card durchforsten. Und die Dateien ×.SH neuesten Datums
nach oben verschieben.
Mein Ziel ist das verschieben, durchzusetzen durch Analyse, da haperts bei mir . Ich bin Anfänger im programmieren.
|
jug
Ehemalige
Anmeldungsdatum: 19. März 2007
Beiträge: 12335
Wohnort: Berlin
|
Das beantwortet leider immer noch nicht die dir gestellten Fragen. Nochmal: was meinst du mit „oben“? Wo ist dieses oben? Und wenn es ein oben gibt, dann gibt es bestimmt auch ein „unten“, wo ist das? Die größte Frage aber bleibt: was bezweckst du mit der Sortiererei? Es ist doch deine SD-Karte und du hast die Dateien doch dort einsortiert. Warum sind die Dateien dann „unten“, wenn du sie doch „oben“ haben willst? Wenn man versteht was du da machst und warum du das machst, dann kann man dir vielleicht besser helfen. Aber das versuchen wir dir jetzt schon seit Tagen zu erklären, leider hat die Erkenntnis immer noch nicht eingesetzt. Wenn du die Hilfe nicht willst ist das deine Sache. ~jug
|
Moderatorschrecker
(Themenstarter)
Anmeldungsdatum: 3. August 2014
Beiträge: 188
|
Oben entspricht / im Dateisystem Seit Tagen?! Seit heute am 20.10.2014 habe ich hier einen separaten Thread.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Moderatorschrecker schrieb: Mein Ziel ist das verschieben, durchzusetzen durch Analyse, da haperts bei mir . Ich bin Anfänger im programmieren.
Versuche das Problem doch mal in einem eindeutig formulierten, verständlichen Satz zu beschreiben. Was ist das exakte Ziel - z.B. "Ich möchte ein Verzeichnis und seine Unterverzeichnisse nach allen Dateien mit der Endung ".sh" durchsuchen und diese nach dem jeweiligen Änderungsdatum sortiert anzuzeigen, wobei die zuletzt geänderten Dateien als erstes aufgelistet werden sollen."
|
jug
Ehemalige
Anmeldungsdatum: 19. März 2007
Beiträge: 12335
Wohnort: Berlin
|
Moderatorschrecker schrieb: Seit Tagen?! Seit heute am 20.10.2014 habe ich hier einen separaten Thread.
Du hast mehr als ein Thema und in anderen Themen habe ich dich mehr als einmal auf Richtig fragen hingewiesen. Das meinte ich. ~jug
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
Moderatorschrecker schrieb: Oben entspricht / im Dateisystem
Da hat ein normaler Benutzer (aus gutem Grund) kein Schreibrecht.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Da Du uns nicht verraten willst, was Du letztendlich mit dem Sortieren bezwecken willst, kann auch ich Dir nur eine grundsätzliche Antwort geben:
Du suchst sämtliche Dateien mit find und gibst zu jeder Datei mit stat zuerst den Zeitstempel (in Sekunden) und dann den Dateinamen aus, aber als Null- terminierte Strings. Das ist ganz wichtig, damit Leer- und Sonderzeichen nichts zerschießen. Diese Liste sortierst Du numerisch (→ den Zeitstempel am Anfang !) mit sort und liest sie mit while read wieder ein.
Dann hast Du dort nacheinander alle Dateinamen und Zeitstempel, der Reihe nach ihrem Alter: while read -rd ''; do
echo "Zeitstempel: ${REPLY%% *}"
echo " bei Datei: ${REPLY#* }"
done < <(find . -exec stat --printf "%Y %n\0" {} \; | sort -nz) Falls Du genauere Tips haben möchtest, solltest Du allerdings wirklich mal verraten, was Du mit dem Ganzen erreichen willst. 😉 LG, track
|
Mooi
Anmeldungsdatum: 15. August 2014
Beiträge: 187
|
@Track: Hat es einen bestimmten Grund, das Du stat benutzt, anstelle -printf "%T@ %p\0" direkt in find? (Sollte doch wesentlich schneller sein)
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Mooi schrieb: @Track: Hat es einen bestimmten Grund, das Du stat benutzt, anstelle -printf "%T@ %p\0" direkt in find?
Nö, ich hatte nur noch nicht mitgekriegt, dass find sowas hübsches hat. Also: Danke für den Hinweis ! (Beim Tempo wird es nicht viel ausmachen, denke ich mal. Es sind doch nur ein paar 1000 Dateien auszuwerten, und wahrscheinlich geht die meiste Zeit sowieso für den I/O drauf ...) LG, track
|
Moderatorschrecker
(Themenstarter)
Anmeldungsdatum: 3. August 2014
Beiträge: 188
|
Was wollte ich mit dem sortieren bezwecken: 1. Es dient der Übersichtlichkeit. 2. Es kommt vor das ich manuell neuere Dateien tiefer auf der SDCard kopiere, das ist von meinem Standpunkt nicht ideal. 3. Sortierte Dateien sind leichter aufzufinden. 4. Als Zeitvertreib, Hobby. 5. Ich habe keine kommerziellen Interessen.
|
Mooi
Anmeldungsdatum: 15. August 2014
Beiträge: 187
|
track schrieb: (Beim Tempo wird es nicht viel ausmachen, denke ich mal. Es sind doch nur ein paar 1000 Dateien auszuwerten, und wahrscheinlich geht die meiste Zeit sowieso für den I/O drauf ...)
Ca. 7000 Dateien auf HD:
~> time find . -exec stat --printf "%Y %n\0" {} \; >/dev/null
real 0m18.057s
user 0m6.608s
sys 0m9.833s
~> time find . -printf "%T@ %p\0" >/dev/null
real 0m0.143s
user 0m0.052s
sys 0m0.012s
~/>
Ich sehe sogar einen extremen Unterschied. ☺ Bei ca. 7000 stat-Befehlen kein Wunder - oder?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
Mooi schrieb: track schrieb: (Beim Tempo wird es nicht viel ausmachen, denke ich mal. Es sind doch nur ein paar 1000 Dateien auszuwerten, und wahrscheinlich geht die meiste Zeit sowieso für den I/O drauf ...)
Ca. 7000 Dateien auf HD:
~> time find . -exec stat --printf "%Y %n\0" {} \; >/dev/null
real 0m18.057s
user 0m6.608s
sys 0m9.833s
~> time find . -printf "%T@ %p\0" >/dev/null
real 0m0.143s
user 0m0.052s
sys 0m0.012s
~/>
Ich sehe sogar einen extremen Unterschied. ☺ Bei ca. 7000 stat-Befehlen kein Wunder - oder?
Das ist aber auch eine sehr ineffiziente Art stat mit find zu benutzen. Dann solltest Du aber auch ehrlich sein und es so ausprobieren: | time find . -exec stat --printf "%Y %n\0" {} + >/dev/null
|
Ciao robert
|