GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So manipulieren Sie Dateinamen mit Leerzeichen und Sonderzeichen in Linux

Wir stoßen sehr regelmäßig auf Datei- und Ordnernamen. In den meisten Fällen beziehen sich Datei-/Ordnernamen auf den Inhalt der Datei/des Ordners und beginnen mit Nummer und Zeichen. Alphanumerische Dateinamen sind ziemlich gebräuchlich und sehr weit verbreitet, aber das ist nicht der Fall, wenn wir mit Datei-/Ordnernamen umgehen müssen, die Sonderzeichen enthalten.

Hinweis :Wir können Dateien jeden Typs haben, aber der Einfachheit und einfachen Implementierung wegen werden wir uns mit Textdateien (.txt) befassen ), im gesamten Artikel.

Beispiele für die gebräuchlichsten Dateinamen sind:

abc.txt
avi.txt
debian.txt
...

Beispiele für numerische Dateinamen sind:

121.txt
3221.txt
674659.txt
...

Beispiele für alphanumerische Dateinamen sind:

eg84235.txt
3kf43nl2.txt
2323ddw.txt
...

Beispiele für Dateinamen, die Sonderzeichen haben und nicht sehr häufig vorkommen:

#232.txt
#bkf.txt
#bjsd3469.txt
#121nkfd.txt
-2232.txt
-fbjdew.txt
-gi32kj.txt
--321.txt
--bk34.txt
...

Eine der offensichtlichsten Fragen hier ist – wer um alles in der Welt erstellt/handhabt Dateien/Ordnernamen mit einem Hash (#) , ein Semikolon (;) , ein Bindestrich (-) oder ein anderes Sonderzeichen.

Ich stimme Ihnen zu, dass solche Dateinamen nicht üblich sind, aber Ihre Shell sollte nicht kaputt gehen/aufgeben, wenn Sie mit solchen Dateinamen umgehen müssen. Auch technisch gesehen wird alles, sei es Ordner, Treiber oder irgendetwas anderes, unter Linux als Datei behandelt.

Umgang mit einer Datei, die einen Bindestrich (-) im Namen hat

Erstellen Sie eine Datei, die mit einem Bindestrich (-) beginnt , sagen Sie -abx.txt .

$ touch -abc.txt
Beispielausgabe
touch: invalid option -- 'b'
Try 'touch --help' for more information.

Der Grund für den obigen Fehler ist, dass die Shell alles nach einem Bindestrich (-) interpretiert , als Option, und offensichtlich gibt es keine solche Option, daher der Fehler.

Um einen solchen Fehler zu beheben, müssen wir der Bash-Shell mitteilen (ja, dieses und die meisten anderen Beispiele in diesem Artikel sind für BASH ) nichts nach Sonderzeichen (hier Bindestrich) als Option zu interpretieren.

Es gibt zwei Möglichkeiten, diesen Fehler zu beheben:

$ touch -- -abc.txt		[Option #1]
$ touch ./-abc.txt		[Option #2]

Sie können die so erstellte Datei auf beide oben genannten Arten überprüfen, indem Sie die Befehle ls oder ls -l für eine lange Auflistung ausführen.

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 11:05 -abc.txt

Um die obige Datei zu bearbeiten, können Sie Folgendes tun:

$ nano -- -abc.txt 
or 
$ nano ./-abc.txt 

Hinweis :Sie können nano ersetzen mit jedem anderen Editor Ihrer Wahl sagen Sie vim als:

$ vim -- -abc.txt 
or 
$ vim ./-abc.txt 

Um eine solche Datei zu verschieben, müssen Sie auf ähnliche Weise Folgendes tun:

$ mv -- -abc.txt -a.txt
or
$ mv -- -a.txt -abc.txt

und um diese Datei zu löschen, müssen Sie Folgendes tun:

$ rm -- -abc.txt
or
$ rm ./-abc.txt 

Wenn Sie viele Dateien in einem Ordner haben, dessen Name Bindestriche enthält, und Sie alle auf einmal löschen möchten, gehen Sie wie folgt vor:

$ rm ./-*
Wichtiger Hinweis:

1. Dieselbe Regel wie oben beschrieben gilt für eine beliebige Anzahl von Bindestrichen im Namen der Datei und deren Vorkommen. Nämlich -a-b-c.txt , ab-c.txt , abc-.txt usw.

2. Die gleiche Regel wie oben beschrieben gilt für den Namen des Ordners mit beliebig vielen Bindestrichen und deren Vorkommen, außer dass Sie zum Löschen des Ordners „rm -rf verwenden müssen ‘ als:

$ rm -rf -- -abc
or
$ rm -rf ./-abc

Umgang mit Dateien mit HASH (#) im Namen

Das Symbol # hat in BASH eine ganz andere Bedeutung. Alles nach einem # wird als Kommentar interpretiert und daher von BASH vernachlässigt.

Anhand von Beispielen verstehen:

Erstellen Sie eine Datei #abc.txt .

$ touch #abc.txt
Beispielausgabe
touch: missing file operand
Try 'touch --help' for more information.

Der Grund für den obigen Fehler ist, dass Bash #abc.txt interpretiert ein Kommentar und damit ignorieren. Der Befehl touch wurde also ohne einen Dateioperanden übergeben, und daher ist der Fehler.

Um einen solchen Fehler zu beheben, können Sie BASH bitten, # nicht zu interpretieren als Kommentar.

$ touch ./#abc.txt
or
$ touch '#abc.txt'

und überprüfen Sie die gerade erstellte Datei als:

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:14 #abc.txt

Erstellen Sie nun eine Datei, deren Name # enthält überall außer beim Betteln.

$ touch ./a#bc.txt
$ touch ./abc#.txt

or
$ touch 'a#bc.txt'
$ touch 'abc#.txt'

Führen Sie „ls -l“ aus ‘, um es zu überprüfen:

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:16 a#bc.txt
-rw-r--r-- 1 avi avi 0 Jun  8 12:16 abc#.txt

Was passiert, wenn Sie zwei Dateien erstellen (z. B. eine und #bc ) auf einmal:

$ touch a.txt #bc.txt

Überprüfen Sie die gerade erstellte Datei:

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:18 a.txt

Aus dem obigen Beispiel geht hervor, dass nur die Datei „a ‘ und Datei ‘#bc ‘ wurde ignoriert. Um die obige Situation erfolgreich auszuführen, können wir tun,

$ touch a.txt ./#bc.txt
or
$ touch a.txt '#bc.txt'

und überprüfen Sie es als:

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:20 a.txt
-rw-r--r-- 1 avi avi 0 Jun  8 12:20 #bc.txt

Sie können die Datei wie folgt verschieben:

$ mv ./#bc.txt ./#cd.txt
or
$ mv '#bc.txt' '#cd.txt'

Kopieren Sie es als:

$ cp ./#cd.txt ./#de.txt
or
$ cp '#cd.txt' '#de.txt'

Sie können es bearbeiten, indem Sie den Editor Ihrer Wahl verwenden als:

$ vi ./#cd.txt
or
$ vi '#cd.txt'
$ nano ./#cd.txt
or
$ nano '#cd.txt'

Und löschen Sie es als:

$ rm ./#bc.txt 
or
$ rm '#bc.txt'

Um alle Dateien mit Hash (# ) im Dateinamen können Sie Folgendes verwenden:

 # rm ./#*

Umgang mit Dateien mit Semikolon (;) im Namen

Falls Sie es nicht wissen, fungiert das Semikolon als Befehlstrennzeichen in BASH und möglicherweise auch in anderen Shells. Semikolon lässt Sie mehrere Befehle auf einmal ausführen und fungiert als Trennzeichen. Haben Sie sich jemals mit einem Dateinamen befasst, der ein Semikolon enthält? Wenn nicht hier, werden Sie es tun.

Erstellen Sie eine Datei mit Semikolon darin.

$ touch ;abc.txt
Beispielausgabe
touch: missing file operand
Try 'touch --help' for more information.
bash: abc.txt: command not found

Der Grund für den obigen Fehler ist, dass beim Ausführen des obigen Befehls BASH touch interpretiert als Befehl, konnte aber vor dem Semikolon keinen Dateioperanden finden und meldet daher einen Fehler. Es meldet auch einen weiteren Fehler, nämlich „abc.txt ‘ Befehl nicht gefunden, nur weil BASH nach dem Semikolon einen anderen Befehl erwartet hat und ‘abc.txt ‘, ist kein Befehl.

Um einen solchen Fehler zu beheben, weisen Sie BASH an, das Semikolon nicht als Befehlstrennzeichen zu interpretieren, als:

$ touch ./';abc.txt'
or
$ touch ';abc.txt'

Hinweis :Wir haben den Dateinamen mit einfachen Anführungszeichen eingeschlossen '' . Es teilt BASH mit, dass ; ist ein Teil des Dateinamens und kein Befehlstrennzeichen.

Der Rest der Aktion (dh Kopieren, Verschieben, Löschen) für die Datei und den Ordner mit Semikolon im Namen kann direkt ausgeführt werden, indem der Name in einfache Anführungszeichen gesetzt wird.

Umgang mit anderen Sonderzeichen im Datei-/Ordnernamen

Pluszeichen (+) im Dateinamen

Benötigt nichts extra, machen Sie es einfach auf normale Weise, als einfacher Dateiname wie unten gezeigt.

$ touch +12.txt 

Dollarzeichen ($) im Dateinamen

Sie müssen den Dateinamen in einfache Anführungszeichen setzen, wie wir es beim Semikolon getan haben. Der Rest ist einfach..

$ touch '$12.txt'

Prozent (%) im Dateinamen

Sie müssen nichts anders machen, behandeln Sie es wie eine normale Datei.

$ touch %12.txt

Sternchen (*) im Dateinamen

Mit Asterisk im Dateinamen ändert sich nichts und Sie können es weiterhin als normale Datei verwenden.

$ touch *12.txt

Hinweis :Wenn Sie eine Datei löschen müssen, die mit * beginnt , Verwenden Sie niemals die folgenden Befehle, um solche Dateien zu löschen.

$ rm *
or
$ rm -rf *

Verwenden Sie stattdessen,

$ rm ./*.txt

Ausrufezeichen (!) im Dateinamen

Setzen Sie einfach den Dateinamen in einfache Anführungszeichen und der Rest ist gleich.

$ touch '!12.txt'

At Zeichen (@) im Dateinamen

Nichts Besonderes, behandeln Sie einen Dateinamen mit einem At-Zeichen als eine normale Datei.

$ touch '@12.txt'

^ im Dateinamen

Keine zusätzliche Aufmerksamkeit erforderlich. Verwenden Sie eine Datei mit ^ in Dateiname als normale Datei.

$ touch ^12.txt

Ampersand (&) im Dateinamen

Der Dateiname sollte in einfache Anführungszeichen gesetzt werden und Sie können loslegen.

$ touch '&12.txt'

Klammern () im Dateinamen

Wenn der Dateiname Klammern enthält, müssen Sie den Dateinamen in einfache Anführungszeichen setzen.

$ touch '(12.txt)'

Klammern {} im Dateinamen

Keine zusätzliche Pflege erforderlich. Behandeln Sie sie einfach als eine weitere Datei.

$ touch {12.txt}

Chevrons <> im Dateinamen

Ein Dateiname mit Chevrons muss in einfache Anführungszeichen gesetzt werden.

$ touch '<12.txt>'

Eckige Klammern [ ] im Dateinamen

Behandeln Sie Dateinamen mit eckigen Klammern wie normale Dateien und Sie müssen sich nicht besonders darum kümmern.

$ touch [12.txt]

Unterstrich (_) im Dateinamen

Sie sind sehr verbreitet und erfordern nichts Besonderes. Mach einfach das, was du auch mit einer normalen Datei gemacht hättest.

$ touch _12.txt

Gleich (=) im Dateinamen

Ein Gleichheitszeichen ändert nichts, Sie können es als normale Datei verwenden.

$ touch =12.txt

Umgang mit Backslash (\)

Backslash weist die Shell an, das nächste Zeichen zu ignorieren. Sie müssen den Dateinamen in einfache Anführungszeichen setzen, wie wir es beim Semikolon getan haben. Der Rest der Dinge ist einfach.

$ touch '.txt'

Der Spezialfall des Schrägstrichs

Sie können keine Datei erstellen, deren Name einen Schrägstrich (/) enthält , bis Ihr Dateisystem einen Fehler hat. Es gibt keine Möglichkeit, einem Schrägstrich zu entkommen.

Wenn Sie also eine Datei wie ‘/12.txt’ erstellen können oder ‘b/c.txt’ dann hat entweder Ihr Dateisystem einen Fehler oder Sie haben Unicode-Unterstützung, mit der Sie eine Datei mit Schrägstrich erstellen können. In diesem Fall ist der Schrägstrich kein echter Schrägstrich, sondern ein Unicode-Zeichen, das wie ein Schrägstrich aussieht.

Fragezeichen (?) im Dateinamen

Wieder ein Beispiel, bei dem Sie keinen besonderen Versuch unternehmen müssen. Ein Dateiname mit Fragezeichen kann am allgemeinsten behandelt werden.

$ touch ?12.txt

Punktmarkierung (.) im Dateinamen

Die Dateien, die mit dem Punkt (.) beginnen sind unter Linux sehr speziell und werden Punktdateien genannt. Sie sind versteckte Dateien, im Allgemeinen eine Konfigurations- oder Systemdatei. Sie müssen den Schalter „-a verwenden ‘ oder ‚-A ‘ mit ls-Befehl um solche Dateien anzuzeigen.

Das Erstellen, Bearbeiten, Umbenennen und Löschen solcher Dateien ist einfach.

$ touch .12.txt

Hinweis :Unter Linux dürfen Sie beliebig viele Punkte (.) haben wie Sie in einem Dateinamen benötigen. Im Gegensatz zu anderen Systemen bedeuten Punkte im Dateinamen nicht, Name und Erweiterung zu trennen. Sie können eine Datei mit mehreren Punkten erstellen als:

$ touch 1.2.3.4.5.6.7.8.9.10.txt

und überprüfen Sie es als:

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 14:32 1.2.3.4.5.6.7.8.9.10.txt

Komma (,) im Dateinamen

Sie können Kommas in einem Dateinamen haben, so viele Sie wollen und Sie brauchen nichts extra. Machen Sie es einfach auf normale Weise als einfachen Dateinamen.

$ touch ,12.txt
or
$ touch ,12,.txt

Doppelpunkt (:) im Dateinamen

Sie können so viele Doppelpunkte in einem Dateinamen haben, wie Sie möchten, und Sie benötigen nichts Zusätzliches. Machen Sie es einfach auf normale Weise als einfachen Dateinamen.

$ touch :12.txt
or
$ touch :12:.txt

Anführungszeichen (einfach und doppelt) im Dateinamen haben

Um Anführungszeichen im Dateinamen zu haben, müssen wir die Austauschregel anwenden. Das heißt, wenn Sie im Dateinamen ein einfaches Anführungszeichen benötigen, schließen Sie den Dateinamen in doppelte Anführungszeichen ein, und wenn Sie im Dateinamen doppelte Anführungszeichen benötigen, schließen Sie ihn in ein einfaches Anführungszeichen ein.

$ touch "15'.txt"

and

$ touch '15”.txt'

Tilde (~) im Dateinamen

Einige Editoren in Linux mögen emacs Erstellen Sie eine Sicherungsdatei der bearbeiteten Datei. Die Sicherungsdatei hat den Namen der Originaldatei plus eine Tilde am Ende des Dateinamens. Sie können eine Datei haben, deren Name Tilde enthält, an jedem Ort einfach als:

$ touch ~1a.txt
or
$touch 2b~.txt

Leerraum im Dateinamen

Erstellen Sie eine Datei, deren Name Leerzeichen zwischen Buchstaben/Worten enthält, sagen Sie „hi, mein Name ist avishek.txt “.

Es ist keine gute Idee, Dateinamen mit Leerzeichen zu haben, und wenn Sie einen eindeutig lesbaren Namen benötigen, sollten Sie einen Unterstrich oder Bindestrich verwenden. Wenn Sie jedoch eine solche Datei erstellen müssen, müssen Sie einen umgekehrten Schrägstrich verwenden, der das nächste Zeichen ignoriert. Um die obige Datei zu erstellen, müssen wir es auf diese Weise tun..

$ touch hi\ my\ name\ is\ avishek.txt

hi my name is avishek.txt

Ich habe versucht, alle Szenarien abzudecken, auf die Sie stoßen könnten. Die meisten der obigen Implementierungen sind explizit für die BASH-Shell und funktionieren möglicherweise nicht in anderen Shells.

Wenn Sie das Gefühl haben, dass ich etwas verpasst habe (das ist sehr häufig und menschlich), können Sie Ihren Vorschlag in den Kommentaren unten einfügen. Bleiben Sie in Verbindung, kommentieren Sie weiter. Bleiben Sie dran und verbunden! Liken und teilen Sie uns und helfen Sie uns, uns zu verbreiten!


Linux
  1. So leiten Sie die Ausgabe in eine Datei und Stdout in Linux um

  2. Was ist NFS und wie wird es unter Linux installiert?

  3. So extrahieren Sie .gz- und .tar.gz-Dateien unter Linux

  4. Wie verhindert man das Ändern, Löschen und Umbenennen von Dateien/Verzeichnissen in Linux?

  5. Wie sehe ich du in GB anstelle von MB in Linux?

Wie man mit Hardlinks und Softlinks unter Linux arbeitet

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

So entfernen Sie Leerzeichen aus Dateinamen in Linux

So erstellen und verwenden Sie eine Auslagerungsdatei unter Linux

So gehen Sie Dateinamen mit Leerzeichen in Linux an

Wie benenne ich alle Dateien mit Sonderzeichen und Leerzeichen in einem Verzeichnis um?