Skriptumbenennung auf dem Synology NAS

864
Giorgos Tzortzatos

Ich habe eine Synology Nas, die viele Dateien mit ungültigen Zeichen enthält (die Nas erteilt Benutzern keine Zugriffsberechtigung, wenn ein solches Zeichen im Namen vorhanden ist), wie * . " / \ [ ] : ; | = ,ich es geschafft habe, CLI auf die Box zu bekommen und fragte mich, ob Es gibt eine Möglichkeit, die Dateinamen aller gemeinsam genutzten Ordner oder die störenden Zeichen mit zu ändern _. Die Dateibaumstruktur ist ziemlich tief.

0
Dies sind keine "ungültigen" Zeichen. Ein Schrägstrich in einem Namen, der keinen Verzeichnisseparator kennzeichnet, muss jedoch beispielsweise Unix-Clients als etwas anderes ausgesetzt werden. tripleee vor 6 Jahren 0

4 Antworten auf die Frage

0
Oo.oO

Sie können den findBefehl hier verwenden:

find / -name "*" -exec ~/bin/some_script_that_will_rename_files.sh {} \; 

und Sie benötigen ein Skript, das Dateien nach Belieben umbenennt. Es könnte zB alle Zeichen durch etwas anderes ersetzen.

Die Frage ist, ob Sie diese seltsamen Zeichen nur in Dateinamen haben oder ob sie sich auch in Verzeichnissen befinden.

0
Mark Setchell

Prüfen Sie, ob Sie Perl darauf ausführen können:

perl -v 

Wenn es ausgeführt wird, können Sie installieren oder prüfen, ob die Perl- renameSkripts ausgeführt werden und Dateien sehr einfach umbenennen können. Beispiel:

touch "Freddy :;|=, Frog" # create file with mad name  rename --dry-run 's/[:;|=,]/_/g' *Frog # see what it would become 'Freddy :;|=, Frog' would be renamed to 'Freddy _____ Frog' 

Ich habe einige andere Beispiele gemacht - siehe hier .


Wenn Sie dies nicht tun können rename, können Sie so etwas verwenden, aber testen Sie es zuerst auf einigen KOPIEN einiger Dateien und erstellen Sie eine Sicherungskopie, bevor Sie es ausführen .

Hier teste ich nur GIF-Dateien, also mache ich kein Chaos. Außerdem mache ich eigentlich gar nichts, ich gebe einfach aus, was ich tun würde:

find . -iname "*gif" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); echo "mv {} $new"' \; 

Wenn dies richtig aussieht, müssen Sie diesen Befehl ausführen:

find . -iname "*gif" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; 

was etwas anders ist, weil es keine gibt echound ich muss die Parameter doppelt zitieren mv.

Perl Rename ist auf dem System leider nicht vorhanden. Der Befehl `mv` ist vorhanden. Gibt es eine Möglichkeit, den Befehl "find" und "mv" zur Ausführung der Aufgabe zu kombinieren? Giorgos Tzortzatos vor 6 Jahren 0
0
Giorgos Tzortzatos

Vielen Dank an Mark Setchell und mko für ihre Hilfe. Ich bekam die folgenden Befehle

find . -iname "*:*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*<*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*>*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*|*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*?*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*[*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*]*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*\*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; 
0
seppe peeters

'brename' ist eine Go-Binärdatei, die das schwere Heben übernimmt.
verbrachte viel Zeit damit, in bash (synology nas busybox, ubuntu ist heutzutage dash) zu lösen.
https://github.com/shenwei356/brename

es hat binaries für linux 64-bit (abhängig vom alter der nas).

ssh in dein nas, wget download binary von link. weg hacken

./brename -d -R -p ":" -r "" / volume1 / share_name
(entferne -d --dry-run)

längere Antwort:
(Öffnen Sie ein Terminal der Shell)
$ ssh admin @ nas_ip_adress_or_dns_name [Sie können später $ sudo su root mit dem Administratorkennwort] $ wget https://github.com/shenwei356/brename/releases/download/v2.7.0/ brename_linux_amd64.tar.gz
$ tar -xvzf brename (drücken Sie die Tabulatortaste, um die Autovervollständigung zu starten ),
dann
$ ./brename -R -p ":" -r "" / volume1 / share_name
add --dry-run, um den Effekt zunächst ohne Änderung zu sehen. über der Zeile werden alle ":" durch ein Leerzeichen ersetzt.

Bitte [bearbeiten] Sie diese Antwort, um den Richtlinien für Softwareempfehlungen [hier] (https://meta.superuser.com/a/5330/911683) zu folgen. Worthwelle vor 5 Jahren 0