Wie finde ich "zu lange" Pfade und Dateinamen?

DS111-User

Benutzer
Mitglied seit
13. Feb 2011
Beiträge
285
Punkte für Reaktionen
14
Punkte
18
Aus einem bisher nicht ersichtlichen Grund gibt es auf meiner DS111 (neueste DSM 5.1-5022 Update 5 installiert) Dateien und Pfade die insgesamt "zu lang" sind um z.B. auf eine am PC angeschlossene USB-Festplatte (unter Windows 7 mit NTFS-formatiert) zu kopieren.

Kennt jeman eine Möglichkeit, wie ich auf der Synology selber die ingesamt längsten Dateinamen finden kann?
Ich möchte diese dann - wenn irgendwie möglich - auch direkt auf der Synology kürzen oder allenfalls die Pfad-Struktur vereinfachen.

Bin dankbar für jeden Hinweis, wie ich das am besten mache.
Ziel soll sein, dass ich wieder sämtliche Dateien von der DiskStation mit der gesamten Verzeichnisstruktur auf eine externe USB-Platte kopieren kann.
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.640
Punkte für Reaktionen
2.047
Punkte
829
Kein Kunstwerk, aber ich habe Dir ein kleines Perl-Skript geschrieben, was Dir die Pfade ausgibt, die eine Länge von mehr als 255 Zeichen haben (kann man einstellen):

Rich (BBCode):
#!/usr/bin/perl

use strict;

my $dirlist="/root/dirlist.txt";
my $startdir="/volume1";
my $pathlength=255;

system("/usr/bin/find $startdir -print > $dirlist");

open DIRLIST, "<$dirlist"  || die "Can't open $dirlist: $!\n";

while (<DIRLIST>) {
  if (length($_) > $pathlength) {
    print ("$_");
  }
}

close DIRLIST;
my $result = unlink ($dirlist);

Gehe als User root per ssh oder telnet auf die DS, speichere das Skript z.B. als long-path.pl unter /root und mache es per "chmod 700 /root/long-path.pl" ausführbar. Das Perl-Paket muss installiert sein. Nutzung natürlich auf eigene Gefahr. Bei mir läuft es.
 
Zuletzt bearbeitet:

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
13.751
Punkte für Reaktionen
3.729
Punkte
468
Wenn Windows die Pfade zu lang sind, kannst du auch einfach etwas "tiefer" mounten.

Statt
net use x: \\<ds>\<share>
geht auch
net use x: \\<ds>\<share>\<dir1>\<dir2>\...
 

DS111-User

Benutzer
Mitglied seit
13. Feb 2011
Beiträge
285
Punkte für Reaktionen
14
Punkte
18
@dil88: Herzlichen Dank für Deine Mühe! Perl habe ich im Moment (noch) nicht installiert.
Wenn ich das aber mit der (auf den ersten Blick einfacheren) Methode von 'Benares' nicht hinkriege, werde ich das nachholen.

@Benares: Das wusste ich nicht, danke für den Tipp!
Verstehe ich Dich richtig: In Deinem Beispiel muss ich um \\<ds>\<share>\<dir1>\<dir2>\ mounten zu können, weder <\dir1> noch <\dir2> vorgängig extra freigeben, oder?
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.640
Punkte für Reaktionen
2.047
Punkte
829
Der Ansatz von Benares ist clever. Das Perl-Paket kannst Du nach Nutzung ja auch wieder deaktivieren bzw. deinstallieren.
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
13.751
Punkte für Reaktionen
3.729
Punkte
468
Verstehe ich Dich richtig: In Deinem Beispiel muss ich um \\<ds>\<share>\<dir1>\<dir2>\ mounten zu können, weder <\dir1> noch <\dir2> vorgängig extra freigeben, oder?
Nein, musst du nicht.
 

blurrrr

Benutzer
Sehr erfahren
Mitglied seit
23. Jan 2012
Beiträge
6.204
Punkte für Reaktionen
1.104
Punkte
248
Ist ein ganz alter Hut.. man hat die Freigabe eingebunden (z.B. X:\Daten\) schmeisst da haufenweise Zeugs rein und dann kann es nicht mehr gelesen werden, weil es auf dem Dateisystem dann heisst "/Volume1/@Daten" und dann sind es eben ein paar Zeichen mehr. Probleme kommen eigentlich in 2 typischen Szenarien vor:

- dynamisch generierte Dateinamen (z.B. bei temporären Internetdateien "opidngoint4g09nergnsopjpsejfpoi20hn213rß0jpr1f280hfg320hg3n3p2gn32g902t.jpg")
- oder der Klassiker: User-generiert.... "X:\Daten\Projekte 2016\erste Halbjahr 2016\Projekt 1 - 2016\Angebote\Angebot 1\Angebot 1 - Projekt 1-2016 - Hausbau Musterstrasse 12345 Musterhausen - Rohre - Fallrohr Bezeichnung XY Material ABC Kundennummer 4711 Herr Mustermann.pdf"

Grade diese doppelte und dreifache Nennung von bestimmten Dingen ist wirklich richig übel, da habe ich in meiner beruflichen Laufmann schon so einige Klopper gesehen... Sowas gilt es also zu vermeiden... Schlimmer wird es noch, wenn noch Unterordner gemountet werden, also statt "X:\Daten" dann ggf. "X:\Daten\Projekte 2016\erste Halbjahr 2016\" und dann noch immer so wie oben beschrieben wird mit Ordner- und Dateinamen gebastelt wird...
 

black_devil8975

Benutzer
Mitglied seit
19. Jan 2016
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Hallo, der Thread ist zwar schon alt aber währe es möglich, dass mir jemand erklärt wie ich zu lange Dateinamen automatisch kürzen kann? Dürfen max 145 Zeichen lang sein.
 

fullspeed

Benutzer
Mitglied seit
15. Feb 2013
Beiträge
29
Punkte für Reaktionen
1
Punkte
3
Kein Kunstwerk, aber ich habe Dir ein kleines Perl-Skript geschrieben, was Dir die Pfade ausgibt, die eine Länge von mehr als 255 Zeichen haben (kann man einstellen):

Rich (BBCode):
#!/usr/bin/perl

use strict;

my $dirlist="/root/dirlist.txt";
my $startdir="/volume1";
my $pathlength=255;

system("/usr/bin/find $startdir -print > $dirlist");

open DIRLIST, "<$dirlist"  || die "Can't open $dirlist: $!\n";

while (<DIRLIST>) {
  if (length($_) > $pathlength) {
    print ("$_");
  }
}

close DIRLIST;
my $result = unlink ($dirlist);

Gehe als User root per ssh oder telnet auf die DS, speichere das Skript z.B. als long-path.pl unter /root und mache es per "chmod 700 /root/long-path.pl" ausführbar. Das Perl-Paket muss installiert sein. Nutzung natürlich auf eigene Gefahr. Bei mir läuft es.
Ich habe soweit alles gemacht, weiß aber leider nicht, wie ich das Perl-Script jetzt ausführen kann? Bitte um kurzen Tipp :) Danke!
 


 

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