Я хочу найти файл, а затем ввести каталог, содержащий его. Я пытался, find /media/storage -name "Fedora" | xargs cd
но, конечно, я is not a directory
ошибка.
Как мне ввести его родительский каталог с помощью однострочной команды?
shopt -s globstar
вы могли бы cd /media/storage/**/Fedora
, но это не останавливает оценку глобуса при первом совпадении (так что это медленнее, чем решение SteelDriver. Для интерактивного использования я обычно использую мышь и копирую / вставляю имя каталога, (и alt + backspace по мере необходимости, чтобы убрать задние компоненты пути, которые я не хотел), но если вы будете делать это много, я думаю, что стоит сделать функцию оболочки.
xargs cd
не может работать. cd
может работать только как встроенная оболочка, потому что она должна изменять контекст самой оболочки. Нет никакого способа, которым xargs
дочерний процесс может сделать это. IDK, если это то, что вы имели в виду под «конечно», или если путь, который find
печатается, содержит пробелы, разделенные xargs, поскольку вы не использовали, -d \n
или что-то еще. Или find -exec {} \;
.
cd
. cd
это встроенный bash, если бы cd
это была отдельная команда, то он изменил бы (свой собственный) dir, а затем завершил работу (вернул вас в оболочку, которая находится в том же состоянии, что и раньше, без изменения dir).