Каждый раз, когда я должен найти файл и затем открыть его, я должен использовать: найдите, что./-называют ****.properties., затем скопируйте результат, и затем vi "вставляют результат здесь". Если я должен использовать мышь, это может быть немного проблемы. Так есть ли какой-либо лучший способ сделать это?
Можно открыть произвольный файл при помощи AWK или sed для печати конкретного номера строки.
vi "$(find ./ -name **.properties | awk 'NR==2')"
или
vi "$(find ./ -name **.properties | awk 'NR==2{print;quit}')"
или
vi "$(find ./ -name **.properties | sed -n '2p')"
или
vi "$(find ./ -name **.properties | sed -n '2{p;q}')"
Версии с quit
или q
возвратитесь немного более быстрый, если существует большое количество файлов.
find . -name \*.properties | xargs -d '\n' vi
откроет все файлы на сингле vi
экземпляр. Для открытия просто первого использовать
find . -name \*.properties | head -1 | xargs -d '\n' vi
При изменении оболочки на zsh Вам будет нужно find
намного менее часто, поскольку zsh позволяет Вам делать большую часть какой find
может сделать через globbing. Прежде всего, **/
имеет особое значение: **/foo
расширяется до названных файлов foo
в текущем каталоге и его подкаталогах рекурсивно, т.е. это соответствует тем же файлам как find . -name foo
. Таким образом, можно отредактировать все соответствия с
vi **/*.properties
Начиная с удара 4.0, если Вы помещаете shopt -s globstar
в Вашем ~/.bashrc
, **/
ведет себя таким же образом.
В zsh у Вас есть намного больше возможностей благодаря спецификаторам шарика (описанный очень кратко около конца zshexpn
страница справочника). Принцип должен ограничить соответствия путем добавления одного или нескольких спецификаторов в круглых скобках после соответствия. Например, спецификатор .
ограничивает регулярными файлами, в то время как /
ограничивает каталогами. Спецификатор [1]
сохраняет только первое соответствие; [1,4]
сохраняет первые четыре соответствия; и так далее. Например, для редактирования первого (в полном пути лексикографический порядок) регулярное соответствие файла *.properties
:
vi **/*.properties(.[1])
Если Вы отредактировали бы последний раз измененный файл соответствия, можно использовать om
спецификатор для сортировки соответствий ко времени изменения (в порядке увеличивающегося возраста):
vi **/*.properties(.om[1])
Можно хотеть посмотреть на -quit
опция для find
команда. Следующее могло быть примером того, что Вы хотите выполнить:
find . -name "*.properties" -print -exec vi {} \; -quit
Я должен указать, что, поскольку обнаружил вскоре после того, как я отправил этот ответ, -quit
переключатель не существует для версии BSD find
команда, что Вы, вероятно, найдете, например, на MacOS.
find . -name "*.properties" -exec vi {} \;
Затем используйте ключ прерывания (например, ^C) после редактирования первого файла.
Можно поместить результаты find
команда в командную строку для vi
как это:
vi $(find . -name \*.properties -print)
или как это:
vi $(find -name \*.properties)
с тех пор .
и -print
подразумеваются, если опущено. Для открытия просто первого результата использовать
vi $(find -name \*.properties | head -1)