Есть ли способ найти определенный файл, а затем перейти в каталог, содержащий его за один раз? - PullRequest
4 голосов
/ 06 мая 2010

Я ищу способ найти уникальный файл, а затем перейти в каталог, содержащий этот файл. Что-то вроде:

find . -name 'Subscription.java' | xargs cd

Или:

find . -name 'Subscription.java' -exec cd {} \;

Я знаю, что это не сработает, потому что он одновременно пытается cd предоставить полный абсолютный путь, содержащий файл, а также потому, что xargs не может выполнять какие-либо встроенные команды оболочки, но вы понимаете того, чего я хочу достичь.

Ответы [ 3 ]

7 голосов
/ 06 мая 2010
cd $(find . -name Subscription.java | xargs dirname)
0 голосов
/ 10 марта 2014

Linux / OSX (альтернативный ответ):

cd `find . -name Subscription.java | xargs dirname`
0 голосов
/ 07 мая 2010

Любая попытка сценария команды cd должна гарантировать, что команда выполняется в текущей оболочке. В противном случае, если он запускается в дочерней оболочке, он не будет работать так, как вам нужно, так как текущий рабочий каталог родителя не будет изменен.

GNU find имеет -printf, который можно использовать для печати каталога любых найденных файлов. Вывод команды find может быть передан в cd с подстановкой команд.

cd $(find . -name Subscription.java -printf '%h\n')

cd (в bash) игнорирует дополнительные аргументы, поэтому, если найдено несколько файлов, cd перейдет в каталог первого найденного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...