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

Suchen Sie die Datei und wechseln Sie dann in dieses Verzeichnis in Linux

Folgendes sollte sicherer sein:

cd -- "$(find / -name ls -type f -printf '%h' -quit)"

Vorteile:

  • Der doppelte Bindestrich verhindert die Interpretation eines Verzeichnisnamens, der optional mit einem Bindestrich beginnt (find erzeugt keine solchen Dateinamen, ist aber nicht schädlich und könnte für ähnliche Konstrukte erforderlich sein)
  • -name überprüfen Sie vor -type überprüfen, da letzteres manchmal einen stat erfordert
  • Nein dirname erforderlich, da der %h Bezeichner gibt bereits den Verzeichnisnamen aus
  • -quit um die Suche nach der ersten gefundenen Datei zu stoppen, also kein head erforderlich, was dazu führen würde, dass das Skript bei Verzeichnisnamen mit Zeilenumbrüchen fehlschlägt

Sie können etwas verwenden wie:

pax[/home/pax]> cd "$(dirname "$(find / -type f -name ls | head -1)")"
pax[/usr/bin]> _

Dadurch wird die erste ls gefunden reguläre Datei und wechseln Sie dann in dieses Verzeichnis.

In Bezug darauf, was jedes Bit tut:

  • Die Suche beginnt bei / und suchen Sie nach unten und listen Sie alle regulären Dateien auf (-type f ) namens ls (-name ls ). Es gibt andere Dinge, die Sie zu find hinzufügen können um die erhaltenen Dateien weiter einzuschränken.
  • Die Leitung durch head -1 wird alles außer dem ersten herausfiltern.
  • $() ist eine Möglichkeit, die Ausgabe eines Befehls zu nehmen und sie für einen anderen auf die Befehlszeile zu setzen Befehl.
  • dirname kann eine vollständige Dateispezifikation nehmen und Ihnen das Pfadbit geben.
  • cd wechselt einfach in dieses Verzeichnis.

Wenn Sie jedes Bit nacheinander ausführen, können Sie sehen, was passiert:

pax[/home/pax]> find / -type f -name ls
/usr/bin/ls

pax[/home/pax]> find / -type f -name ls | head -1
/usr/bin/ls

pax[/home/pax]> dirname "$(find / -type f -name ls | head -1)"
/usr/bin

pax[/home/pax]> cd "$(dirname "$(find / -type f -name ls | head -1)")"

pax[/usr/bin]> _

Linux
  1. Linux – Zweck des Verzeichnisses /net?

  2. Cheat-Sheet für Linux-Datei-/Verzeichnisberechtigungen

  3. Holen Sie sich die neueste Datei in einem Verzeichnis unter Linux

  4. Suchen eines Verzeichnisses in einem Linux-Terminal

  5. Wie kopiere ich eine Datei/einen Ordner aus dem Home-Verzeichnis eines anderen Benutzers in Linux?

So finden Sie eine Zeichenfolge in einer Datei unter Linux

Linux-Berechtigungen – So finden Sie Berechtigungen einer Datei

So finden Sie Dateien basierend auf dem Zeitstempel in Linux

So ermitteln Sie die Gesamtgröße eines Verzeichnisses in Linux

So finden Sie die längste(n) Zeile(n) in einer Datei in Linux

Der Linux-Befehl zum Suchen des Verzeichnisses:Erklärt