Linux/Datei/Name/bereinigen: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 5: Zeile 5:
|-
|-
| [[detox]] || benennt Dateien um, damit sie leichter zu handhaben sind
| [[detox]] || benennt Dateien um, damit sie leichter zu handhaben sind
|-  
|-
| [[convmv]] || konvertiert den Zeichensatz von Dateinamen
| [[convmv]] || konvertiert den Zeichensatz von Dateinamen
|-
|-
| [[fslint]] || Utility to Fix Problems with Filesystems Data
| [[fslint]] || Utility to Fix Problems with Filesystems Data
|-  
|-
| mv/sed || $ '''mv 'file' $(echo 'file' | sed -e 's/[^A-Za-z0-9._-]/_/g')'''
| mv/sed || $ '''mv 'file' $(echo 'file' | sed -e 's/[^A-Za-z0-9._-]/_/g')'''
|-
|-
| [[rename]] ||  
| [[rename]] ||
  rename 's/[^\x00-\x7F]//g' *
  rename 's/[^\x00-\x7F]//g' *
  find . -exec rename 's/[^\x00-\x7F]//g' "{}" \;y
  find . -exec rename 's/[^\x00-\x7F]//g' "{}" \;y
Zeile 26: Zeile 26:


== Dateien mit führendem Bindestrich ==
== 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.
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 --
  [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.
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.
Um mit einem führenden Bindestrich im Dateinamen unter der Linux-Shell umzugehen, können Sie eine der beiden folgenden Methoden ausprobieren


; Methode Eins
; 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.
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
  $ chmod 600 ./-mein.txt
  $ rm ./-mein.txt
  $ rm ./-mein.txt


; Methode zwei
; 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.
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
  $ chmod -- 600 -meine.txt
  $ rm -- -meine.txt
  $ rm -- -meine.txt
Zeile 46: Zeile 52:
== Verschieben von Dateien, die mit einem Bindestrich beginnen ==
== Verschieben von Dateien, die mit einem Bindestrich beginnen ==
Wie verschiebe ich inUnix- oder Linux-Betriebssystemen Dateien, die mit einem Bindestrich beginnen (z.&nbsp;B.&nbsp;<kbd>/home/you/--filename.txt</kbd> oder <kbd>/home/you/-filename.txt</kbd>)? Wie kopiere ich eine Datei, deren Name mit einem Bindestrich ("<kbd>-</kbd>") beginnt?
Wie verschiebe ich inUnix- oder Linux-Betriebssystemen Dateien, die mit einem Bindestrich beginnen (z.&nbsp;B.&nbsp;<kbd>/home/you/--filename.txt</kbd> oder <kbd>/home/you/-filename.txt</kbd>)? Wie kopiere ich eine Datei, deren Name mit einem Bindestrich ("<kbd>-</kbd>") 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.
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 <kbd>-</kbd> oder <kbd>--</kbd> (Bindestrich oder Bindestrich) als Option interpretiert, die dem Befehl übergeben wird.
Zum Beispiel wird <kbd>-</kbd> oder <kbd>--</kbd> (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.
* 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.
* 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<kbd>(-</kbd> oder <kbd>--</kbd>) beginnt.
* Alle Befehle können die Tipps verwenden, wenn sie einen Dateinamen behandeln, der mit einem Bindestrich<kbd>(-</kbd> oder <kbd>--</kbd>) beginnt


=== Datei verschieben, die mit einem Bindestrich beginnt ===
=== Datei verschieben, die mit einem Bindestrich beginnt ===
Die Syntax lautet wie folgt:
Die Syntax lautet wie folgt
  cp -- Quelle-Zielcp [Option] -- Quelle-Ziel
  cp -- Quelle-Zielcp [Option] -- Quelle-Ziel
Wir verwenden "<kbd>'''--'''</kbd>", damit Linux- und Unix-Befehle die Shell-Befehlszeilenoptionen nicht mehr parsen.
Wir verwenden "<kbd>'''--'''</kbd>", damit Linux- und Unix-Befehle die Shell-Befehlszeilenoptionen nicht mehr parsen
* Sehen wir uns nun einige Beispiele an.
* Sehen wir uns nun einige Beispiele an


=== Erstellen Sie eine Testdatei ===
=== Erstellen Sie eine Testdatei ===
Geben Sie den folgenden Befehl ein:
Geben Sie den folgenden Befehl ein
  cd /tmp/> '-foo.txt'> '--bar.txt'
  cd /tmp/> '-foo.txt'> '--bar.txt'


==== Dateien auflisten, die mit einem Bindestrich beginnen ====
==== Dateien auflisten, die mit einem Bindestrich beginnen ====
Versuchen Sie, sie aufzulisten, geben Sie ein:
Versuchen Sie, sie aufzulisten, geben Sie ein
  ls -l *.txt
  ls -l *.txt
Sie erhalten eine Fehlermeldung wie folgt:
Sie erhalten eine Fehlermeldung wie folgt
  ls: nicht erkannte Option '--bar.txt' Versuchen Sie `ls --help' für weitere Informationen.
  ls: nicht erkannte Option '--bar.txt' Versuchen Sie `ls --help' für weitere Informationen
Um die Optionsliste zu begrenzen, verwenden Sie <kbd>--</kbd>, d.&nbsp;h.&nbsp;geben Sie den folgenden ls-Befehl ein:
Um die Optionsliste zu begrenzen, verwenden Sie <kbd>--</kbd>, d.&nbsp;h.&nbsp;geben Sie den folgenden ls-Befehl ein
  ls -l -- *.txt
  ls -l -- *.txt


==== Die Befehle cp und mv ====
==== Die Befehle cp und mv ====
Wenn eine Datei, deren Name mit <kbd>-</kbd> oder <kbd>--</kbd> beginnt, kopiert oder verschiebt man Dateien mit der folgenden Syntax:
Wenn eine Datei, deren Name mit <kbd>-</kbd> oder <kbd>--</kbd> beginnt, kopiert oder verschiebt man Dateien mit der folgenden Syntax
  cp -- '--bar.txt' /path/to/destcp -- '-test.doc' /home/vivek/backups/test.doc
  cp -- '--bar.txt' /path/to/destcp -- '-test.doc' /home/vivek/backups/test.doc
ODER
ODER
  cp -v -- '--bar.txt ' /pfad/nach/fest
  cp -v -- '--bar.txt ' /pfad/nach/fest
Um Dateien zu verschieben:
Um Dateien zu verschieben
  mv -- '--bar.txt' /Pfad/nach/Ziel
  mv -- '--bar.txt' /Pfad/nach/Ziel
ODER
ODER
Zeile 81: Zeile 87:


=== Unix und Linux kopieren Dateien, die mit einem Bindestrich beginnen ===
=== Unix und Linux kopieren Dateien, die mit einem Bindestrich beginnen ===
Das <kbd>-</kbd> oder <kbd>--</kbd> gilt als Teil von Befehlszeilenoptionen.
Das <kbd>-</kbd> oder <kbd>--</kbd> gilt als Teil von Befehlszeilenoptionen
* Daher können Sie keine Dateien kopieren, auflisten, löschen oder verschieben, die mit diesen Zeichen beginnen.
* Daher können Sie keine Dateien kopieren, auflisten, löschen oder verschieben, die mit diesen Zeichen beginnen
* Kurz gesagt, die Syntax lautet wie folgt:
* Kurz gesagt, die Syntax lautet wie folgt
  cp options -- '--filename' /destmv options -- '--filename' /dest
  cp options -- '--filename' /destmv options -- '--filename' /dest
Die <kbd>--</kbd> begrenzen die Optionsliste.
Die <kbd>--</kbd> begrenzen die Optionsliste
* Spätere Argumente, falls vorhanden, werden als Operanden behandelt, auch wenn sie mit <kbd>- oder</kbd> - beginnen.
* Spätere Argumente, falls vorhanden, werden als Operanden behandelt, auch wenn sie mit <kbd>- oder</kbd> - beginnen
* Dies gilt für alle Linux/Unix/macOS/*BSD-Befehle wie rm, cp, mv, ls, ln und so weiter:
* 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'
  command -- 'file'command [options] -- 'file'rm -- '--filename'rm -fr -- '-dirname'rmdir -- '--dirname'


==== So verwenden Sie den Befehl find für denselben Zweck ====
==== So verwenden Sie den Befehl find für denselben Zweck ====
Die Syntax lautet:
Die Syntax lautet


<code>find /dir/to/search -maxdepth 1 -name '--filename' -delete</code>
<code>find /dir/to/search -maxdepth 1 -name '--filename' -delete</code>


Siehe GNU find man page hier.
Siehe GNU find man page hier


=== Tipp: Behandlung eines Dateinamens, der mit einem Bindestrich<kbd>(-</kbd>) beginnt ===
=== Tipp: Behandlung eines Dateinamens, der mit einem Bindestrich<kbd>(-</kbd>) beginnt ===
Sie können den Bindestrich aus dem Befehl "ausblenden", indem Sie den Dateinamen mit <kbd>./</kbd> (Punkt-Schrägstrich) beginnen.
Sie können den Bindestrich aus dem Befehl "ausblenden", indem Sie den Dateinamen mit <kbd>./</kbd> (Punkt-Schrägstrich) beginnen
* Versuchen Sie zum Beispiel, eine Datei namens "<kbd>-filename.txt</kbd>" mit dem Befehl rm zu löschen:
* Versuchen Sie zum Beispiel, eine Datei namens "<kbd>-filename.txt</kbd>" mit dem Befehl rm zu löschen
  > '-filename'rm -filename # wird eine Fehlermeldung #rm./-filename
  > '-filename'rm -filename # wird eine Fehlermeldung #rm./-filename


=== Schlussfolgerung ===
=== Schlussfolgerung ===
Das <kbd>--</kbd> ist technisch gesehen als Begrenzung der Optionsliste bekannt.
Das <kbd>--</kbd> ist technisch gesehen als Begrenzung der Optionsliste bekannt
* Spätere Argumente, falls vorhanden, werden als Operanden behandelt, auch wenn sie mit <kbd>-</kbd> beginnen und die Syntax lautet:
* Spätere Argumente, falls vorhanden, werden als Operanden behandelt, auch wenn sie mit <kbd>-</kbd> beginnen und die Syntax lautet


<code>command -- -foo</code>
<code>command -- -foo</code>
Zeile 120: Zeile 126:
<code>virsh --help | grep --color -- '--dom'</code>
<code>virsh --help | grep --color -- '--dom'</code>


Auf dieser Seite wurde erklärt, wie man mit einem Linux- oder Unix-Dateinamen umgeht, der mit einem Bindestrich<kbd>(-</kbd>) beginnt.
Auf dieser Seite wurde erklärt, wie man mit einem Linux- oder Unix-Dateinamen umgeht, der mit einem Bindestrich<kbd>(-</kbd>) beginnt
* Der Trick ist, den Dateinamen entweder mit <kbd>./</kbd> zu beginnen oder das <kbd>--</kbd> vor dem Dateinamen zu übergeben.
* Der Trick ist, den Dateinamen entweder mit <kbd>./</kbd> zu beginnen oder das <kbd>--</kbd> vor dem Dateinamen zu übergeben




[[Kategorie:Linux/Datei/Dateinamen]]
[[Kategorie:Linux/Datei/Dateinamen]]

Version vom 14. September 2024, 07:35 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