Umgang mit Leerzeichen in Dateinamen unter Linux

Umgang mit Leerzeichen in Dateinamen unter Linux

Die zentralen Thesen

Wenn Sie auf einem Linux-System einen Dateinamen mit Leerzeichen haben, können Sie Ihren Dateinamen in Anführungszeichen setzen, damit Bash ihn korrekt behandeln kann. Die Tab-Vervollständigung erleichtert die Eingabe von Dateinamen in der Befehlszeile, auch wenn sie Leerzeichen enthalten.

Wie die meisten Betriebssysteme unterstützt Linux Dateinamen mit Leerzeichen. Die Verwendung dieser Dateinamen in der Befehlszeile ist jedoch nicht immer einfach. Es gibt verschiedene Möglichkeiten, wie Sie mit Dateinamen umgehen können, die Leerzeichen enthalten.

Wie funktionieren Linux-Dateinamen?

Alles, was auf der Festplatte Ihres Computers gespeichert ist, muss einen Namen haben. Ohne einen Namen gäbe es keine Dateien. Alle Anwendungen und Daemons, die beim Hochfahren Ihres Computers gestartet werden, sowie die gesamte von Ihnen verwendete Software müssen identifiziert und in einem Dateisystem gespeichert werden. Diese Identifikation ist der Name der Datei.‘

Das Gleiche gilt für die Dateien, die Sie erstellen oder installieren. Alle Ihre Dokumente, Bilder und Musik benötigen Dateinamen. Ohne Dateinamen könnten keine Ihrer digitalen Assets existieren. Da Dateinamen so wichtig sind, versucht Linux, so wenig Regeln wie möglich für ihre Zusammensetzung festzulegen.

Unter Linux kann ein Dateiname jedes Zeichen außer dem Schrägstrich „/“ und dem Nullzeichen 0x00 enthalten. Das Nullzeichen wird verwendet, um das Ende einer Zeichenfolge zu markieren, daher darf es nicht in der Zeichenfolge selbst vorhanden sein, da Linux sonst den Dateinamen an der Position des Nullzeichens abschneiden würde. Der Schrägstrich „/“ wird als Trennzeichen in Verzeichnispfaden verwendet.

Bei Dateinamen wird die Groß-/Kleinschreibung beachtet und sie können einschließlich des Nullzeichens bis zu 255 Byte lang sein . Verzeichnispfade können einschließlich des Nullzeichens bis zu 4096 Byte lang sein. Beachten Sie, dass es sich hierbei um die Länge in Bytes handelt, die möglicherweise nicht direkt den Zeichen entspricht. 16-Bit-Unicode-Zeichen belegen beispielsweise jeweils zwei Bytes.

Retro-Computing-Enthusiasten und diejenigen mit langem Gedächtnis wissen, dass in den frühen Tagen der Personalcomputer das Disk Operating System von Microsoft , DOS, die Groß-/Kleinschreibung nicht beachtete und eine Dateinamenbeschränkung von acht Zeichen sowie eine dreistellige Erweiterung hatte .

Beim Benennen der Dateien musste man sehr überlegt und manchmal auch kreativ sein. Im Vergleich dazu bedeutet die Freiheit, die wir heute haben, dass wir Dateien beliebig benennen können, ohne an etwas anderes als die Beschreibung zu denken, die wir für diese Datei erstellen.

Was uns jedoch bei Dateinamen am häufigsten aus der Fassung bringt, sind nicht die Zeichen, die wir eingeben, sondern die Leerzeichen zwischen ihnen.

Warum Leerzeichen in Linux-Dateinamen lästig sind

Shells wie Bash interpretieren eine durch Leerzeichen getrennte Wortfolge als einzelne Befehlsargumente und nicht als einzelnes Argument. Hier ist ein Beispiel touchfür die Erstellung einer neuen Datei mit dem Namen „meine neue Datei.txt“.

touch my new file.txt ls

Ich versuche, mit Touch eine Datei mit Leerzeichen im Namen zu erstellen

Wie wir sehen können, lswerden drei Dateien erstellt, eine mit dem Namen „my“, eine weitere mit dem Namen „new“ und eine weitere mit dem Namen „file.txt“.

Beachten Sie, dass es touchkeine Beschwerde gab oder einen Fehler auslöste. Es führt aus, was wir seiner Meinung nach von ihm verlangen. Es führt uns also stillschweigend zur Befehlszeile zurück. Wenn wir nicht motiviert sind, dies zu überprüfen, wissen wir nicht, dass die Dinge nicht nach Plan verlaufen sind.

Um die gewünschte Datei zu erstellen, müssen wir ein Zitat oder ein Escapezeichen verwenden.

So zitieren und maskieren Sie Leerzeichen

Wenn wir den gesamten Dateinamen in Anführungszeichen setzen, touchweiß es, dass der zitierte Text als einzelnes Argument behandelt werden muss.

touch 'my new file.txt' ls

Verwenden Sie Touch, um eine Datei mit Leerzeichen im Namen zu erstellen und den gesamten Dateinamen in Anführungszeichen zu setzen

Dieses Mal erhalten wir die einzelne Datei, die wir erwarten.

Wir können das gleiche Ergebnis erzielen, wenn wir das Backslash-Zeichen „ \“ verwenden, um die Leerzeichen zu maskieren. Durch das „Escapen“ der Leerzeichen werden sie nicht als Sonderzeichen – also Argumenttrennzeichen – behandelt, sondern als einfache alte Leerzeichen betrachtet.

touch my\ second\ new\ file.txt ls

Erstellen Sie mit Touch eine Datei mit Leerzeichen im Namen, die durch Backslashes maskiert sind

Das funktioniert, aber das Escapen von Leerzeichen macht die Eingabe von Dateinamen langsamer und fehleranfälliger. Es kann wirklich hässlich werden, wenn Verzeichnisnamen auch Leerzeichen enthalten.

cp dir one/my\ text\ file.txt dir\ two/my\ text file.bak ls

Verwenden Sie maskierte Leerzeichen in einem Befehl, um eine Datei von einem Verzeichnis in ein anderes zu kopieren

Dieser Befehl kopiert eine einzelne Textdatei aus einem Verzeichnis namens „dir one“ in ein Verzeichnis namens „dir two“ und speichert die Kopie als BAK-Datei. Und es ist ein ziemlich einfaches Beispiel.

So beheben Sie das Platzproblem an seiner Ursache

Wenn es sich um Ihre eigenen Dateien handelt, können Sie die Richtlinienentscheidung treffen, niemals Leerzeichen zu verwenden, und Dateinamen wie diesen erstellen (oder in großen Mengen umbenennen ).

mynewtextfile.txt

Zugegebenermaßen ist das eine robuste Lösung, aber dennoch hässlich. Es gibt bessere Optionen, z. B. die Verwendung von Bindestrichen „ -“ oder Unterstrichen „ _„, um Ihre Wörter zu trennen.

my-new-text-file.txt my_new_text_file.txt

Beides umgeht das Problem und ist lesbar. Wenn Sie Ihren Dateinamen keine zusätzlichen Zeichen hinzufügen möchten, können Sie CamelCase verwenden , um Ihre Dateinamen wie folgt lesbar zu machen:

MyNewTextFile.txt

Die Tab-Erweiterung erleichtert den Umgang mit Leerzeichen

Natürlich ist es nur hilfreich, eine Namenskonvention zu übernehmen und diese einzuhalten, wenn Sie mit Ihren eigenen Dateien arbeiten. Es ist unwahrscheinlich, dass Dateien, die von irgendwo anders stammen, Ihrer angenommenen Namenskonvention folgen.

Mithilfe der Tabulatorerweiterung können Sie Dateinamen für uns präzise ausfüllen. Nehmen wir an, wir möchten die BAK-Datei, die wir in „dir two“ erstellt haben, mit löschenrm .

Wir beginnen mit der Eingabe von „rm dir“, da wir den rmBefehl verwenden und wissen, dass der Verzeichnisname mit „dir“ beginnt.

rm dir

Geben Sie den Anfang eines Befehls ein, bevor Sie die Tabulatortaste drücken, um die Tabulatorvervollständigung zu verwenden

Durch Drücken der „Tab“-Taste sucht Bash nach Übereinstimmungen im aktuellen Verzeichnis.

Durch Drücken der Tabulatortaste wurden dem Teilverzeichnispfad ein Backslash und ein Leerzeichen hinzugefügt

Es gibt zwei Verzeichnisse, die mit „dir“ beginnen, und in beiden Fällen ist das nächste Zeichen ein Leerzeichen. Daher fügt Bash das Backslash-Zeichen „ \“ und ein Leerzeichen hinzu. Bash wartet dann darauf, dass wir den nächsten Charakter bereitstellen. Es benötigt das nächste Zeichen, um zwischen den beiden möglichen Übereinstimmungen in diesem Verzeichnis zu unterscheiden.

Wir geben ein „t“ für „zwei“ ein und drücken dann noch einmal die Tabulatortaste.

Der Verzeichnispfad nach der Eingabe

Bash vervollständigt den Verzeichnisnamen für uns und wartet darauf, dass wir den Anfang des Dateinamens eingeben.

Wir haben nur eine Datei in diesem Verzeichnis, daher reicht die Eingabe des ersten Buchstabens des Dateinamens, „m“, aus, um Bash mitzuteilen, welche Datei wir verwenden möchten. Die Eingabe von „m“ und das Drücken der „Tabulatortaste“ vervollständigen den Dateinamen für uns und „Enter“ führt den gesamten Befehl aus.

Durch Drücken wird der gesamte Dateiname vervollständigt

Durch die Tabulatorerweiterung können Sie ganz einfach sicherstellen, dass Sie die richtigen Dateinamen eingeben, und sie beschleunigt auch die Navigation und Eingabe in der Befehlszeile im Allgemeinen.

So verwenden Sie Dateinamen mit Leerzeichen in Bash-Skripten

Es ist keine Überraschung, dass Skripte genau die gleichen Probleme mit Leerzeichen in Dateinamen haben wie die Befehlszeile. Wenn Sie einen Dateinamen als Variable übergeben, stellen Sie sicher, dass Sie den Variablennamen in Anführungszeichen setzen.

Dieses kleine Skript überprüft das aktuelle Verzeichnis auf Dateien, die dem Dateimuster „*.txt“ entsprechen, und speichert sie in einer Variablen namens file_list. Eine for-Schleife wird verwendet, um für jede einzelne eine einfache Aktion auszuführen.

#!/bin/bashfile_list=*.txtfor file in $file_listdo ls -hl $filedone

Kopieren Sie diesen Text in einen Editor und speichern Sie ihn in einer Datei namens „files.sh“. Verwenden Sie dann den Befehl chmod , um ihn ausführbar zu machen.

chmod +x files.sh

Verwenden Sie chmod, um das Skript ausführbar zu machen

Wir haben einige Dateien in diesem Verzeichnis. Einer hat einen einfachen Dateinamen und die anderen beiden verwenden Unterstriche „ _“ oder Bindestriche „ -“ anstelle von Leerzeichen. Das sehen wir, wenn wir das Skript ausführen.

./files.sh

Führen Sie das Skript „files.sh“ mit Dateinamen aus, die keine Leerzeichen enthalten

Das scheint gut zu funktionieren. Aber ändern wir die Dateien im Verzeichnis gegen Dateien, deren Namen Leerzeichen enthalten.

./files.sh

Führen Sie das Skript „files.sh“ mit Dateinamen aus, die Leerzeichen enthalten

Jedes Wort in jedem Dateinamen wird so behandelt, als wäre es ein eigenständiger Dateiname, und daher schlägt das Skript fehl. Aber alles, was wir tun müssen, damit das Skript Leerzeichen in Dateinamen verarbeitet, ist, die $fileVariable innerhalb der forSchleife in Anführungszeichen zu setzen.

#!/bin/bashfile_list=*.txtfor file in $file_listdols -hl "$file"done

Beachten Sie, dass das Dollarzeichen „ $„in den Anführungszeichen steht. Wir haben diese Änderung vorgenommen und in der Skriptdatei „files.sh“ gespeichert. Diesmal werden die Dateinamen korrekt behandelt.

./files.sh

Das geänderte files.sh-Skript verarbeitet Dateien mit Leerzeichen in ihren Dateinamen korrekt

Distanziert, aber nicht schuppig

Das Vermeiden von Leerzeichen in Ihren eigenen Dateinamen bringt Sie nur bedingt weiter. Es ist unvermeidlich, dass Sie auf Dateien aus anderen Quellen stoßen, deren Namen Leerzeichen enthalten. Wenn Sie diese Dateien in der Befehlszeile oder in Skripts verwalten müssen, gibt es glücklicherweise einfache Möglichkeiten, dies zu tun.

Linux-Befehle

Dateien

tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · Join · jq · Fold · Uniq · Journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · konvertieren · rclone · shred · srm · scp · gzip · chattr · schneiden · finden · umask · wc · tr

Prozesse

alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · geschichte · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · Timeout · Wall · Yes · Kill · Sleep · Sudo · Su · Time · Groupadd · Usermod · Groups · LSHW · Shutdown · Reboot · Halt · Poweroff · Passwd · LSCPU · Crontab · Date · BG · FG · PIDOF · Nohup · PMAP

Vernetzung

netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert