Linux/Datei/Name/bereinigen: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „== Dateinamen bereinigen == {| class="wikitable sortable options" |- ! Werkzeug !! Beschreibung |- | detox || benennt Dateien um, damit sie leichter zu handhaben sind |- | convmv || konvertiert den Zeichensatz von Dateinamen |- | fslint || Utility to Fix Problems with Filesystems Data |- | mv/sed || $ '''mv 'file' $(echo 'file' | sed -e 's/[^A-Za-z0-9._-]/_/g')''' |- | rename || rename 's/[^\x00-\x7F]//g' * find . -exec rename 's/[^\x…“ |
K Dirkwagner verschob die Seite Linux/Dateinamen/TMP nach Linux/Dateinamen/bereinigen, ohne dabei eine Weiterleitung anzulegen |
(kein Unterschied)
|
Version vom 15. März 2024, 11:48 Uhr
Dateinamen bereinigen
Werkzeug | Beschreibung |
---|---|
detox | benennt Dateien um, damit sie leichter zu handhaben sind |
convmv | konvertiert den Zeichensatz von Dateinamen |
fslint | Utility to Fix Problems with Filesystems Data |
mv/sed | sed -e 's/[^A-Za-z0-9._-]/_/g') |
rename |
rename 's/[^\x00-\x7F]//g' * find . -exec rename 's/[^\x00-\x7F]//g' "{}" \;y |
find/perl |
find /path/to/files -type f -print0 | \ perl -n0e '$new = $_; if($new =~ s/[^[:ascii:]]/_/g) { print("Renaming $_ to $new\n"); rename($_, $new); }' |
bleachbit | Unnötige Dateien entfernen, Speicherplatz freigeben und die Privatsphäre wahren |
Dateien mit führendem Bindestrich
Einige Linux-Tools erzeugen Dateien mit führendem Bindestrich oder Bindestrich (-) in Dateinamen. Oder Ihr handgeschriebenes Programm kann versehentlich Dateinamen erzeugen, die mit einem Minus beginnen. Wenn Sie versuchen, solche Dateien mit ls, rm, cp, mv oder chmod zu entfernen, zu kopieren, umzubenennen oder anderweitig darauf zuzugreifen, erhalten Sie die folgenden Fehlermeldungen.
[cmd]: Ungültige Option --
Das liegt daran, dass Ihr Linux-System das führende Minus im Dateinamen als Teil einer Befehlszeilenoption interpretiert und eine ungültige Option oder einen nicht existierenden Modusfehler ausgibt.
Um mit einem führenden Bindestrich im Dateinamen unter der Linux-Shell umzugehen, können Sie eine der beiden folgenden Methoden ausprobieren.
- Methode Eins
Da ein führendes Minuszeichen im Dateinamen zu Mehrdeutigkeiten bei der Erkennung des Dateinamens führt, müssen Sie diese Mehrdeutigkeit einfach beseitigen, indem Sie dem Dateinamen einen Pfadnamen voranstellen. Wenn Sie zum Beispiel eine Datei mit dem Namen -my.txt im aktuellen Verzeichnis haben, können Sie sie wie folgt aufrufen.
$ chmod 600 ./-mein.txt $ rm ./-mein.txt
- Methode zwei
Die zweite Methode, mit einem führenden Bindestrich umzugehen, besteht darin, ein spezielles Argument zu nutzen, das von getopt() als "Ende der Option" interpretiert wird. Die meisten Standard-Linux-Befehlszeilenprogramme verwenden getopt(), um Befehlszeilenargumente zu verarbeiten. Wenn getopt() auf -- stößt, stoppt es den Options-Scan-Prozess. Fügen Sie daher einfach -- vor dem Dateinamen ein, um deutlich zu machen, dass der Dateiname mit Bindestrich nicht Teil der Kommandozeilenargumente ist.
$ chmod -- 600 -meine.txt $ rm -- -meine.txt
Verschieben von Dateien, die mit einem Bindestrich beginnen
Wie verschiebe ich inUnix- oder Linux-Betriebssystemen Dateien, die mit einem Bindestrich beginnen (z. B. /home/you/--filename.txt oder /home/you/-filename.txt)? Wie kopiere ich eine Datei, deren Name mit einem Bindestrich ("-") beginnt? Viele Meta-Zeichen wie Semikolon, Leerzeichen, Backslashes, Dollarzeichen, Fragezeichen und Sternchen sind Zeichen, die unter Linux und Unix-ähnlichen Betriebssystemen als Shell-Befehle interpretiert werden. Zum Beispiel wird - oder -- (Bindestrich oder Bindestrich) als Option interpretiert, die dem Befehl übergeben wird.
- Probieren Sie die folgenden Vorschläge zum Verschieben (mv) oder Kopieren (cp) dieser Dateien aus.
- Diese Optionen sind nicht auf den mv- oder cp-Befehl beschränkt.
- Alle Befehle können die Tipps verwenden, wenn sie einen Dateinamen behandeln, der mit einem Bindestrich(- oder --) beginnt.
Datei verschieben, die mit einem Bindestrich beginnt
Die Syntax lautet wie folgt:
cp -- Quelle-Zielcp [Option] -- Quelle-Ziel
Wir verwenden "--", damit Linux- und Unix-Befehle die Shell-Befehlszeilenoptionen nicht mehr parsen.
- Sehen wir uns nun einige Beispiele an.
Erstellen Sie eine Testdatei
Geben Sie den folgenden Befehl ein:
cd /tmp/> '-foo.txt'> '--bar.txt'
Dateien auflisten, die mit einem Bindestrich beginnen
Versuchen Sie, sie aufzulisten, geben Sie ein:
ls -l *.txt
Sie erhalten eine Fehlermeldung wie folgt:
ls: nicht erkannte Option '--bar.txt' Versuchen Sie `ls --help' für weitere Informationen.
Um die Optionsliste zu begrenzen, verwenden Sie --, d. h. geben Sie den folgenden ls-Befehl ein:
ls -l -- *.txt
Die Befehle cp und mv
Wenn eine Datei, deren Name mit - oder -- beginnt, kopiert oder verschiebt man Dateien mit der folgenden Syntax:
cp -- '--bar.txt' /path/to/destcp -- '-test.doc' /home/vivek/backups/test.doc
ODER
cp -v -- '--bar.txt ' /pfad/nach/fest
Um Dateien zu verschieben:
mv -- '--bar.txt' /Pfad/nach/Ziel
ODER
mv -v -- '--bar.txt ' /Pfad/nach/Ziel
Unix und Linux kopieren Dateien, die mit einem Bindestrich beginnen
Das - oder -- gilt als Teil von Befehlszeilenoptionen.
- Daher können Sie keine Dateien kopieren, auflisten, löschen oder verschieben, die mit diesen Zeichen beginnen.
- Kurz gesagt, die Syntax lautet wie folgt:
cp options -- '--filename' /destmv options -- '--filename' /dest
Die -- begrenzen die Optionsliste.
- Spätere Argumente, falls vorhanden, werden als Operanden behandelt, auch wenn sie mit - oder - beginnen.
- Dies gilt für alle Linux/Unix/macOS/*BSD-Befehle wie rm, cp, mv, ls, ln und so weiter:
command -- 'file'command [options] -- 'file'rm -- '--filename'rm -fr -- '-dirname'rmdir -- '--dirname'
So verwenden Sie den Befehl find für denselben Zweck
Die Syntax lautet:
find /dir/to/search -maxdepth 1 -name '--filename' -delete
Siehe GNU find man page hier.
Tipp: Behandlung eines Dateinamens, der mit einem Bindestrich(-) beginnt
Sie können den Bindestrich aus dem Befehl "ausblenden", indem Sie den Dateinamen mit ./ (Punkt-Schrägstrich) beginnen.
- Versuchen Sie zum Beispiel, eine Datei namens "-filename.txt" mit dem Befehl rm zu löschen:
> '-filename'rm -filename # wird eine Fehlermeldung #rm./-filename
Schlussfolgerung
Das -- ist technisch gesehen als Begrenzung der Optionsliste bekannt.
- Spätere Argumente, falls vorhanden, werden als Operanden behandelt, auch wenn sie mit - beginnen und die Syntax lautet:
command -- -foo
command -- -bar
command -arg1 -option2 -- -foobar
## sort liest aus der Datei mit dem Namen '-filename' ##
sort -- -filename
## grep command findet den passenden String mit dem Namen '--dom' ##
virsh --help | grep --color -- '--dom'
Auf dieser Seite wurde erklärt, wie man mit einem Linux- oder Unix-Dateinamen umgeht, der mit einem Bindestrich(-) beginnt.
- Der Trick ist, den Dateinamen entweder mit ./ zu beginnen oder das -- vor dem Dateinamen zu übergeben.