Ich will nur neue Datei auf meinen Rechner haben und am längsten nicht benutzen will ich löschen. Die habe ich auf dem BACKUP.
Gibt es Vorlagen?
Anmeldungsdatum: Beiträge: 291 |
Ich will nur neue Datei auf meinen Rechner haben und am längsten nicht benutzen will ich löschen. Die habe ich auf dem BACKUP. Gibt es Vorlagen? |
||||
Anmeldungsdatum: Beiträge: 11179 Wohnort: München |
Du kannst dir mit find zum Beispiel die mtime ansehen und alles was älter als x Tage ist löschen lassen. Man kann das Ergebnis von find natürlich auch sortieren und dann mit anderen Tools weiterverarbeiten, z.B. wenn man die Dateien im aktuellen Arbeitsverzeichnis und seinen Unterverzeichnissen haben will, die vor über 90 Tagen geändert wurden: find . -mtime +90 -printf "%T+\t%p\n" | sort | awk '{print $2}' PS: Wenn du die Dateien löschst, ist dein Backup kein Backup mehr, sondern die primäre Datenquelle - also braucht es ein Backup. |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 291 |
Ich werde "find" lesen; Danke! |
||||
Ehemalige
Anmeldungsdatum: Beiträge: 4577 Wohnort: Berlin |
Wobei hier wie immer die Warnung gilt, dass das so einfach nicht mit Datei- und Verzeichnisnamen funktioniert, die Zeilenumbrüche enthalten. |
||||
Anmeldungsdatum: Beiträge: 11179 Wohnort: München |
Marc_BlackJack_Rintsch schrieb:
null-terminierte Strings gehen natürlich auch, wenn man das braucht: while read -d $'\0' -r file_mtime filename; do echo $filename done < <(find -mtime +90 -printf "%T+\t%P\0" | sort -z) |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 291 |
Ich suche die am längsten nicht benutzen Datei! Ubuntu weiß doch die Daten der am letzten benutzen aller Dateien. Sortiere die Daten der am letzten benutzen aller Dateien (in dem Startverzeichnis ) Wähle das 1. und lösche es Mit Eurer Hilfe müsste ich es in "Linux" übersetzen können. |
||||
Anmeldungsdatum: Beiträge: 4391 Wohnort: Göttingen |
Willst Du das nur in einem Verzeichnis machen, welches keine Unterverzeichnisse enthält? Oder auf ganz vielen Verzeichnissen und diese rekursiv durchgehen? |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12822 |
Wenn Du das für einen ganzen Verzeichnisbaum machen willst, gibt es da eine elegante Lösung in Ruby. Kontrolle:
Löschen
|
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 291 |
Hallo Doc_Symbiosis, mit "Startverzeichnis" := Dateien in dem Startverzeichnis + Dateien in ganz vielen Verzeichnissen und diese rekursiv durchgehen? Hallo rklm, ob meinen Frage beantwortet ist? Muss ich bei Wiki → ruby nachlesen. Was macht der Befehl im Detail? Danke! |
||||
Anmeldungsdatum: Beiträge: 4391 Wohnort: Göttingen |
@Bueffel110: Der Befehl von rklm sucht im aktuellen Verzeichnis (inklusive Unterverzeichnissen) die älteste Datei und löscht diese. @rklm: Danke für diese schicke Lösung! Man lernt immer was dazu... |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12822 |
Er sucht die am längsten nicht modifizierte Datei im aktuellen Verzeichnis und allen Unterverzeichnissen und löscht sie. Wenn "am längsten nicht benutze" beliebige Zugriffe meint, dann
Tatsächlich ist "die älteste" nicht korrekt: Man weiß ja nicht, wie oft Dateien nach ihrer Geburt geändert wurden. Viele Linux-Dateisysteme geben keine Auskunft über den Geburtszeitpunkt (versuch mal
Bitte. Immer gerne - insbesondere, wenn es Ruby ist. ☺ |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 291 |
Gibst keine Auflistung der Optionen von ruby in Bash auf deutsch, in den man auch suchen kann. Speziell
Die Lösung solle nicht nur schicke und elegant auch sehr schnell sein. Es sind einige Dateien zu überprüfen (~1TB). |
||||
Ehemalige
Anmeldungsdatum: Beiträge: 4577 Wohnort: Berlin |
@bueffel110: Die Optionen von Ruby sind überall gleich, also nicht anders wenn man es von der Bash aus startet, einer anderen Shell, oder aus einem ganz anderen Programm heraus. Und das was Du wohl wissen willst sind auch keine Optionen, dass wären im vorliegenden Beispiel ja nur Die Die deutschsprachige Dokumentation bei ruby-doc.org ist, nun ja, recht übersichtlich: Eine Einführung in Ruby (https://ruby-doc.org/de/). Und diese Einführung ist von 2006, was auch eines der Probleme mit übersetzter Dokumentation zeigt: sie ist oft veraltet. |
||||
Anmeldungsdatum: Beiträge: 11179 Wohnort: München |
Ruby ist eine ausgewachsene Programmiersprache (und die sind oft nur auf englisch ordentlich dokumentiert) - dass man damit nette Shell-Einzeiler basteln kann, ist da eher ein angenehmer Nebeneffekt 😉 Die Argumente für den Den mit
Der Ansatz mit Ruby von rklm ist kompakt, aber für große Verzeichnisbäume müssen damit eine Menge Daten zwischengespeichert werden. Man könnte auch iterativ über die Dateien in den einzelnen Verzeichnissen laufen und nur die jeweils älteste Datei behalten, dann spart man sich einiges an Arbeitsspeicher und ab einer gewissen Anzahl von Dateien auch Zeit bei der Sortierung nach mtime - mal grob in Python3:
Das läuft auf meinen Rechnern für größere Dateibäume schneller als der Ruby-Einzeiler. Eine reine Shell-Lösung wäre auch eine Möglichkeit (da dürfte es von der Zahl der zu vergleichenden Dateien abhängen, ob das schneller oder langsamer als die Lösung mit Python3 ist, immerhin muss man wie bei dem Ansatz mit Ruby oben alle Dateien auf einmal sortieren): find . -printf "%T@\t%p\0" | sort -z -n | head -z -n1 | cut -f 2 Mit dem Bash-Builtin time kannst du die Zeiten ermitteln, die so ein Durchlauf mit den verschiedenen Varianten bei deinen aktuell vorhandenen Daten benötigen würde. |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12822 |
Das Volumen der Dateien spielt überhaupt keine Rolle, da die Dateien gar nicht gelesen werden sondern nur ihre Metadaten. Da ist nur die Anzahl der Dateien interessant.
Da ist kein ternärer Operator im Spiel.
Passt so. Danke für die Erläuterung.
Das ist ein
Ich sehe den Vorteil dieses Ansatzes nicht. Du erzeugst jede Menge Listen, die Du wieder wegwirfst und machst die Logik komplizierter. Stattdessen kann man auch gleich durch den gesamten Baum laufen und das globale Minimum bestimmen. Damit spart man eine Reihe von Vergleichen. In Ruby:
Wie große Bäume und wie viel schneller?
Selbst in dem Einzeiler wurde nicht sortiert. |