Suchen Sie lange Dateipfade auf einem externen Laufwerk mit Terminal

3

Ich muss ein großes Volumen auf einen neuen RAID-Server verschieben, der PC-formatiert ist. Ich habe jedoch ein paar Pfade und Dateinamen, die diesen Prozess unterbrechen.

Ich möchte nur wissen, wie man das Terminal benutzt, um:

  1. Suchen Sie das externe Ziellaufwerk
  2. Durchsuchen Sie das Laufwerk nach Pfaden / Dateien mit mehr als 130 Zeichen

Kann jemand helfen?

Ich weiß, wie man nach langen Pfaden sucht, finde ". -Type f -name '????? ... *'", nur nicht sicher, wie ich mein externes Laufwerk anvisieren soll.

handbemaltes Atelier
quelle

Antworten:

3

Das externe Laufwerk ist unter gemountet /Volumes. Führen ls /VolumesSie den Befehl aus, um den genauen Namen anzuzeigen.

Danach können Sie verwenden

find /Volumes/NAME-FROM-ABOVE -print |
    while read line; do [[ ${#line} -gt 130 ]] && echo $line; done

um alle Dateien aufzulisten, bei denen Pfad und Dateiname zusammen mehr als 130 Zeichen umfassen.

PS: Dies wird für Datei- / Pfadnamen nicht arbeiten , um neue Linien und ähnliche Sachen , die (die in der Regel kein Problem) PPS: Wenn Ihr Volumen Name Leerzeichen enthält Sie müssen es umwickeln ""->find "/Volumes/LaCie - BRYT" -print ...

nohillside
quelle
Mein Volume, auf das ich abzielen möchte, ist "LaCie - BRYT", aber ich denke, der Name des Volumens hat mit meinem Ausdruck zu tun. Ich erhalte die Meldung "Unbekannter Primär- oder Operator".
handpaintedstudio
Siehe Bearbeiten. Aber gehen Sie mit Allans Lösung für die ganze Sache, es ist viel schöner, etwas schneller und wird auch für
Randfälle
OK habe es! Ich konnte find "/ Volumes / LaCie - BYRT" -print | ausführen während die Zeile gelesen wird; do [[$ {# line} -gt 130]] && echo $ line; Was viel gedruckt hat. Danke Jungs!!
Handpaintedstudio
4

Der folgende Befehl druckt alle Dateien mit mehr als 130 Zeichen aus

find -E . -type f -regex '.*[^/]{130}'

Der Terminal (Bash) -Befehl zum Auflisten der an das System angeschlossenen Festplatten lautet diskutil. Der Befehl diskutil listgibt alle Datenträger aus. Wählen Sie einfach die Kennung aus, die Ihrem externen Gerät entspricht.

Zum Beispiel:

/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk3
   1:                        EFI EFI                     209.7 MB   disk3s1
   2:                  Apple_HFS FreeAgent Go            499.8 GB   disk3s2
/dev/disk4 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.0 TB     disk4
   1:                        EFI EFI                     209.7 MB   disk4s1
   2:                  Apple_HFS My Passport for Mac     999.8 GB   disk4s2

disk0, disk1Und disk2sind in einem Volumen core. disk3und disk4sind meine externen Treiber

Um auf das Laufwerk zuzugreifen (vorausgesetzt, es ist gemountet), suchen Sie im /VolumesVerzeichnis den entsprechenden Mount-Punkt.

Angenommen, Sie möchten nach "My Passport for Mac" suchen, geben Sie den folgenden Befehl ein:

find -E /Volumes/My\ Passport\ for\ Mac/ -type f -regex '.*[^/]{130}'
Allan
quelle
1
Standard findunterstützt -regextypeleider nicht.
Nohillside
@patrix - du hast recht ... Ich bin in der SSH-Sitzung auf einem anderen Computer, als ich es getestet habe, hat es natürlich funktioniert. Duh ...
Allan
Aber -Efunktioniert -> find -E . -type f -regex '.*[^/]{130}':-)
nohillside
1
Ich habe gerade die Manpage gelesen, -Eals Ihr Kommentar hereinkam. Leider habe ich keine Dateien, mit denen ich sie wirklich testen könnte. Vielen Dank!
Allan
Also, wenn meine Kennung "disk3s2" ist, wie würde ich es schreiben (sorry sehr noob).
handpaintedstudio