Verzeichnis wechseln und Dateien mit einem Befehl in der Fish Shell auflisten
Wenn Sie häufig die Befehlszeile unter Linux verwenden, haben Sie sich wahrscheinlich eine schnellere Möglichkeit gewünscht, durch Verzeichnisse zu navigieren und deren Inhalte anzusehen.
Typischerweise beinhaltet dies das Ausführen von cd, um das Verzeichnis zu wechseln, und dann ls, um Dateien aufzulisten. Obwohl die Kombination dieser Befehle zu einem einzigen Befehl wie eine gute Idee erscheint, kann dies Probleme verursachen, wenn man mit Verzeichnissen arbeitet, die viele Dateien enthalten.
In diesem Leitfaden zeigen wir Ihnen, wie Sie cd und ls sicher in der Fish Shell kombinieren können, indem Sie den timeout-Befehl verwenden. Dies ermöglicht es Ihnen, schnell Verzeichnisse zu wechseln und Dateien in einem Befehl aufzulisten, während sichergestellt wird, dass Ihre Shell auch in Verzeichnissen mit einer großen Anzahl von Dateien reaktionsfähig bleibt.
Warum cd und ls kombinieren?
Standardmäßig zeigt Fish (oder jede andere Shell) beim Verwenden von cd zum Wechseln von Verzeichnissen die Dateien im neuen Speicherort nicht an. Jedes Mal ls separat auszuführen, kann wiederholend sein. Das Kombinieren dieser Befehle erleichtert es, den Inhalt eines Verzeichnisses ohne zusätzliche Schritte zu sehen.
Es gibt jedoch einen Haken: Das Auflisten des Inhalts eines Verzeichnisses mit Millionen von Dateien kann dazu führen, dass Ihre Shell hängt, dabei übermäßige Ressourcen verbraucht und Ihr Terminal nicht reagiert.
Keine Sorge! In den folgenden Schritten werden wir alle möglichen Wege aufzeigen, die cd- und ls-Befehle zu kombinieren.
Methode 1: Einmaliger Befehl
Wenn Sie dies nur einmal tun müssen, können Sie den folgenden Befehl verwenden:
cd /path/to/directory; and lsErsetzen Sie /path/to/directory durch den Ordner, den Sie öffnen möchten. Das and stellt sicher, dass ls nur ausgeführt wird, wenn cd erfolgreich ist.
Das Problem mit dem automatischen Auflisten von Verzeichnisinhalten
Das automatische Ausführen von ls nach jedem cd kann zu Folgendem führen:
- Leistungsprobleme: Das Auflisten von Millionen von Dateien kann lange dauern und viel CPU und Speicher verwenden.
- Nicht reagierende Shell: Ihr Terminal könnte einfrieren, während es versucht, die Dateien aufzulisten.
- Unnötige Ausgabe: Manchmal muss man den Inhalt eines Verzeichnisses nicht sofort sehen, nachdem man zu ihm navigiert hat.
Um diese Probleme zu vermeiden, benötigen wir einen schlaueren Weg, cd und ls zu kombinieren.
Methode 2: Erstellen Sie eine benutzerdefinierte Fish-Funktion mit timeout
Der timeout-Befehl ermöglicht es Ihnen, einen Befehl mit einer Zeitbegrenzung auszuführen. Wenn der Befehl nicht innerhalb der angegebenen Zeit abgeschlossen wird, wird er beendet. Dies ist perfekt, um zu verhindern, dass ls in Verzeichnissen mit zu vielen Dateien hängen bleibt.
So erstellen Sie eine Fish-Shell-Funktion, die cd und ls sicher mit timeout kombiniert.
Schritt 1: Erstellen Sie die Funktion
Öffnen Sie Ihre Fish-Shell-Konfigurationsdatei (~/.config/fish/config.fish) in einem Texteditor:
nano ~/.config/fish/config.fishFügen Sie die folgende Funktion hinzu:
function cdls
# Change to the specified directory
builtin cd $argv[1]
and begin
# List directory contents with a timeout of 1 second
echo "Changed to directory: $PWD"
timeout 1s ls -l
end
endHier ist die Aufschlüsselung der obigen Funktion.
builtin cd $argv[1]: Wechselt in das angegebene Verzeichnis.and begin ... end: Stellt sicher, dass die folgenden Befehle nur ausgeführt werden, wenncderfolgreich ist.timeout 1s ls -l: Führtls -lmit einem 1-Sekunden-Timeout aus. Wennlslänger als 1 Sekunde braucht, wird es beendet.echo "Geändert zu Verzeichnis: $PWD": Gibt den aktuellen Verzeichnispfad zur Klarheit aus.
Sie können auch diese kompakte Funktion verwenden:
function cdls
cd $argv; and timeout 1s ls -l
endVerwenden Sie einfach eine der oben genannten Funktionen. Beide führen dieselbe Aufgabe aus. Wenn Sie beide Funktionen verwenden möchten, geben Sie einfach jeder einen eindeutigen Namen.
Schritt 2: Die Konfiguration speichern und neu laden
Speichern Sie die Datei und laden Sie die Fish-Shell-Konfiguration neu, um die Änderungen anzuwenden:
source ~/.config/fish/config.fishSchritt 3: Verwenden Sie den Befehl cdls
Jetzt können Sie den Befehl cdls verwenden, um Verzeichnisse zu wechseln und deren Inhalte sicher aufzulisten:
cdls /path/to/directoryBeispiel:
cdls enlightenment/sources/e26/Wenn das Verzeichnis eine überschaubare Anzahl von Dateien enthält, wird ls -l innerhalb von 1 Sekunde abgeschlossen und Sie sehen die Auflistung. Wenn das Verzeichnis zu groß ist, wird timeout den ls-Befehl nach 1 Sekunde beenden, wodurch verhindert wird, dass Ihre Shell hängt.
Beispielausgabe:
Changed to directory: /home/ostechnix/enlightenment/sources/e26
total 56
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:13 ecrire
drwxrwxr-x 11 ostechnix ostechnix 4096 Jan 17 19:13 edi
drwxrwxr-x 18 ostechnix ostechnix 4096 Jan 17 19:02 efl
drwxrwxr-x 12 ostechnix ostechnix 4096 Jan 17 19:14 eflete
drwxrwxr-x 11 ostechnix ostechnix 4096 Jan 17 19:10 enlightenment
drwxrwxr-x 8 ostechnix ostechnix 4096 Jan 17 19:14 enlightenment-module-forecasts
drwxrwxr-x 8 ostechnix ostechnix 4096 Jan 17 19:14 enlightenment-module-penguins
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:14 enlightenment-module-places
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:14 entice
drwxrwxr-x 9 ostechnix ostechnix 4096 Jan 17 19:13 enventor
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:12 ephoto
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:13 evisum
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:13 express
drwxrwxr-x 6 ostechnix ostechnix 4096 Jan 17 19:13 rageAnpassen des Zeitlimits
Sie können die Zeitüberschreitungsdauer an Ihre Bedürfnisse anpassen. Zum Beispiel:
- Verwenden Sie
0.5sfür einen kürzeren Timeout:timeout 0.5s ls -l - Verwenden Sie
2sfür einen längeren Timeout:timeout 2s ls -l
Ändere einfach den timeout-Wert in der Funktion.
Optional: Überschreiben Sie den Standardbefehl cd
Wenn Sie möchten, dass dieses Verhalten auf den Standardbefehl cd angewendet wird, definieren Sie cd in Ihrer Fish-Shell-Konfiguration neu:
function cd
builtin cd $argv[1]
and begin
echo "Changed to directory: $PWD"
timeout 1s ls -l
end
endJetzt wird jedes Mal, wenn Sie cd verwenden, automatisch der Inhalt des Verzeichnisses mit einer 1-Sekunden-Timeout aufgelistet.
Methode 3: Verwenden Sie eine Abkürzung
Die Fish-Shell unterstützt Abkürzungen, die sich beim Eintippen in vollständige Befehle erweitern. Um eine Abkürzung für cd zu erstellen, die ls enthält, führe aus:
abbr --add cd 'cd $argv; and timeout 1s ls -l'Diese Methode ist nützlich, weil sie den ursprünglichen cd-Befehl beibehält, während ls automatisch mit einem Timeout ausgeführt wird, um Hänger zu verhindern.
Bonus: Verwenden Sie exa für schnellere Auflistung
Wenn Sie häufig mit großen Verzeichnissen arbeiten, sollten Sie exa in Betracht ziehen, eine moderne Alternative zu ls. exa ist schneller und funktionsreicher, was es besser geeignet macht, Verzeichnisse mit vielen Dateien zu verwalten.
So können Sie die Funktion ändern, um exa zu verwenden:
function cdls
builtin cd $argv[1]
and begin
echo "Changed to directory: $PWD"
timeout 1s exa -l
end
endWir haben bereits eine Liste moderner Alternativen zu beliebten Linux-Befehlen zusammengestellt. Diese Liste bietet die besten Ersatzmöglichkeiten für die alten klassischen Linux-Befehle. Bitte besuchen Sie den folgenden Link für weitere Details:
- Die besten modernen Linux-Befehle für Anfänger und Experten
Fischfunktion entfernen
Wenn Sie die Fish-Funktion cdls nicht mehr verwenden möchten, entfernen Sie einfach die Zeilen, die Sie in der Fish-Konfigurationsdatei hinzugefügt haben. Nachdem Sie diese Zeilen entfernt haben, laden Sie die Fish-Konfiguration mit folgendem Befehl neu:
source ~/.config/fish/config.fishWenn Sie die Abkürzung für cd in der Fish-Shell wie in Methode 3 gezeigt hinzugefügt haben, können Sie sie mit dem Befehl entfernen:
abbr --erase cdDies wird die Abkürzung löschen und cd auf sein Standardverhalten zurücksetzen. Wenn Sie sicherstellen möchten, dass die Abkürzung dauerhaft entfernt wird, überprüfen Sie Ihre ~/.config/fish/config.fish-Datei und entfernen Sie jede Zeile, die abbr --add cd definiert.
Funktionen in einem separaten Verzeichnis zur einfachen Verwaltung aufbewahren
Wie Sie vielleicht bemerkt haben, habe ich die Funktion in dieser Anleitung in der Fish-Konfigurationsdatei gespeichert. Während dies funktioniert, ist es nicht der beste Ansatz.
Das Hinzufügen weiterer Funktionen kann die Konfigurationsdatei überladen und die Verwaltung erschweren. Um sie sauber zu halten, speichern Sie jede Fish-Funktion in einer eigenen Datei innerhalb eines separaten Verzeichnisses. Für weitere Details lesen Sie bitte den folgenden Leitfaden:
- Wie man Funktionen in der Fish-Shell unter Linux verwaltet
Fazit
Die Kombination von cd und ls in der Fish-Shell ist eine großartige Möglichkeit, die Navigation in der Befehlszeile unter Linux zu vereinfachen. Durch die Verwendung des Befehls timeout können Sie eine automatische Verzeichnisauflistung durchführen, ohne Leistungsprobleme oder eine nicht reagierende Shell zu riskieren.
Egal, ob Sie einen einmaligen Befehl, eine benutzerdefinierte Funktion oder eine Abkürzung verwenden, das Hinzufügen eines Timeouts stellt sicher, dass Sie Leistungsprobleme beim Arbeiten mit großen Verzeichnissen vermeiden. Mit diesen Methoden können Sie das Navigieren in Verzeichnissen in der Fish-Shell schneller und effizienter machen.
Verwandte Lektüre:
- [Bash-Tipps] Wie man cd und ls in einem Befehl verwendet
- Wie man in Linux schneller durch Verzeichnisse navigiert
