Ich möchte eine Datei finden und dann das Verzeichnis eingeben, das sie enthält. Ich habe es find /media/storage -name "Fedora" | xargs cdaber natürlich versucht den is not a directoryFehler.
Wie gebe ich das übergeordnete Verzeichnis mit einem einzeiligen Befehl ein?
shopt -s globstarkö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 cdkann ich unmöglich arbeiten. cdkann nur als integrierte Shell arbeiten, da der Kontext der Shell selbst geändert werden muss. Ein xargsuntergeordneter Prozess kann das auf keinen Fall . IDK, wenn Sie das mit "natürlich" gemeint haben oder wenn der Pfad, der findgedruckt wird, Leerzeichen enthält, die durch xargs geteilt werden, da Sie nichts verwendet haben -d \noder so. Oder find -exec {} \;.
cd. cdist ein eingebauter Bash, wenn cdein 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).