Ich möchte eine Datei finden und dann das Verzeichnis eingeben, das sie enthält. Ich habe es find /media/storage -name "Fedora" | xargs cd
aber natürlich versucht den is not a directory
Fehler.
Wie gebe ich das übergeordnete Verzeichnis mit einem einzeiligen Befehl ein?
shopt -s globstar
könnten Sie cd /media/storage/**/Fedora
, aber das hört nicht auf, den Glob beim ersten Match auszuwerten (es ist also langsamer als die Lösung von steeldriver. Für die interaktive Verwendung würde ich normalerweise nach der Maus greifen und den Verzeichnisnamen kopieren / einfügen). (und Alt + Rücktaste nach Bedarf, um nachlaufende Pfadkomponenten zu entfernen, die ich nicht wollte), aber wenn Sie dies häufig tun, könnte es sich lohnen, eine Shell-Funktion zu erstellen.
xargs cd
kann ich unmöglich arbeiten. cd
kann nur als integrierte Shell arbeiten, da der Kontext der Shell selbst geändert werden muss. Ein xargs
untergeordneter Prozess kann das auf keinen Fall . IDK, wenn Sie das mit "natürlich" gemeint haben oder wenn der Pfad, der find
gedruckt wird, Leerzeichen enthält, die durch xargs geteilt werden, da Sie nichts verwendet haben -d \n
oder so. Oder find -exec {} \;
.
cd
. cd
ist ein eingebauter Bash, wenn cd
ein separater Befehl wäre, würde er (sein eigenes) Verzeichnis ändern und dann beenden (Sie werden zur Shell zurückkehren, die sich im selben Zustand wie zuvor befindet, keine Änderung des Verzeichnisses).