Skript um alle Pfade länger als n zu ermitteln?

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Marius2

Benutzer
Registriert
04. Nov. 2014
Beiträge
6
Reaktionspunkte
0
Punkte
0
Hallo zusammen,

wir betreiben mehrere Synology-Server, bestückt je mit zwei bis fünf Platten, alles in allem viele Terabyte Daten. Das soll auch alles automatisch gebackupt werden, in ein RZ mit NTFS-Filesystem.

Wir haben viele Pfade, die dafür zu lang sind. Hat jemand von Euch eine Idee für ein Skript, das (natürlich für jede Synology einzeln), wenn ausgeführt, alle Pfade die länger sind als n Zeichen, in eine Datei schreibt? Dann könnte ich anhand dieser Datei schauen wo wir kürzen müssen. (Einmal hatte ich das über die Windows PowerShell gemacht, da war aber das Problem dass einige Pfade so lang waren, dass die einfach abgestürzt ist; außerdem wäre es natürlich schöner, das Skript direkt auf der Synology auszuführen).

Viele Grüße, Marius
 
Rich (BBCode):
find / > dir.txt 2> /dev/null

sollte eine Liste aller Dateien liefern mit dem kompletten Pfad. Diese Liste muss man dann nur noch durch ein Tool jagen, das die Zeilen mit einer Länge > x herausfiltert. Ist z.B. mit Perl schnell gemacht, gibts aber vielleicht auch schon.
 
Zuletzt bearbeitet:
Hallo,

vielen Dank für die schnelle Antwort! Bei dieser Lösung müsste ich halt jedesmal (fürchte ich muss das ein mal pro Woche laufen lassen) diese Riesendateien generieren, lokal rüberziehen und parsen. Auf lange Sicht viel besser wäre es, dass gleich eine Datei geschrieben wird, in der nur die zu langen Pfade stehen. Bin leider kein Linux- & Perl-Kenner, und möchte auch nicht auf unserem Produktivsystem eigene "Experimente" starten.

Viele Grüße, Marius
 
Hi,

folgendes gibt Dir alle Dateien/Ordner im Pfad /path deren kompetter Pfad länger als 50 Zeichen ist.

Rich (BBCode):
 for line in $(find /path/) ; do if [ ${#line} -gt 50 ] ;  then  echo $line ; fi ; done
 
Hallo,

cool, vielen Dank. Wie gesagt, bin kein Linux-Kenner, kann ich die Ausgabe in eine Datei umleiten? Die -fprint von find nutzt mir da ja nix, das wird ja nur für die Schleife gemacht.

Vielen Dank, viele Grüße! Marius
 
gäbe verschiedene Wege. Mit dem GNU find (keine Ahnung ob das find der Firmware das auch kann) z.B.
Code:
#länger als 256 Zeichen
find / -type f -regextype posix-extended -regex '.{257,}
#oder mit awk
find / -type f | awk '{print length,$0}' | awk '{if($1>256) print $2}'
wobei ich nicht weiss ob das awk der Firmware das kann :-)
 
Leider sind awk und find auf der DS (212+) doch ein bisschen beschränkt...

DIe Ausgabe kann einfach umgeleitet werden:

Rich (BBCode):
 for line in $(find /path/) ; do if [ ${#line} -gt 50 ] ;  then  echo $line ; fi ; done > /pfad/zur/ausgabe.txt
 
Eine Nachfrage noch: Ich lasse das jetzt laufen mit

Code:
for line in $(find /./) ; do if [ ${#line} -gt 220 ] ;  then  echo $line ; fi ; done > /volume1/SysAdmin/pfade.txt

Gibt es eine Möglichkeit, dass der Dateiname hinten irgendiwe nummeriert wird, zum Beispiel mit dem Datum, also etwas wie "...../pfade_06112014.txt"?

Dann könnte ich das als Cron-Job reintun.

Vielen Dank, viele Grüße, Marius
 
Code:
... done > "/volume1/SysAdmin/pfade_$(date '+%d%m%Y').txt"
 
Überlege, ob Du nicht besser %Y%m%d verwendest, da Du so eine chronologische Sortierung hinbekommst.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat