Когда я использую find
, он часто находит несколько результатов, таких как
find -name pom.xml
./projectA/pom.xml
./projectB/pom.xml
./projectC/pom.xml
Я часто хочу выбрать только конкретный результат (например edit ./projectB/pom.xml
). Есть ли способ перечислить find
вывод и выбрать файл для передачи в другое приложение? как:
find <print line nums?> -name pom.xml
1 ./projectA/pom.xml
2 ./projectB/pom.xml
3 ./projectC/pom.xml
!! | <get 2nd entry> | xargs myEditor
?
[Edit] Я столкнулся с некоторыми специфическими ошибками с некоторыми из упомянутых решений. Поэтому я хотел бы объяснить шаги для воспроизведения:
git clone http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.git
cd eclipse.platform.swt.git
<now try looking for 'pom.xml' and 'feature.xml' files>
[Править] Решение 1 Пока что комбинация 'nl' (перечисление вывода), head & tail, похоже, работает, если я объединю их в функции и использую $ (!!).
то есть:
find -name pom.xml | nl #look for files, enumirate output.
#I then define a function called "nls"
nls () {
head -n $1 | tail -n 1
}
# I then type: (suppose I want to select item #2)
<my command> $(!!s 2)
# I press enter, it expands like: (suppose my command is vim)
vim $(find -name pom.xml |nls 2)
# bang, file #2 opens in vim and Bob's your uncle.
[Править] Решение 2 Использование «выбора», кажется, работает также хорошо. например:
findexec () {
# Usage: findexec <cmd> <name/pattern>
# ex: findexec vim pom.xml
IFS=$'\n';
select file in $(find -type f -name "$2"); do
#$EDITOR "$file"
"$1" "$file"
break
done;
unset IFS
}
Your find command | head -TheNumberYouWant
выполнение ваших требований? (С вашей линии:!! | head -2 | xargs myEditor
)Ответы:
Используйте
bash
встроенныеselect
:Для «бонуса» добавлен вопрос в комментарии:
источник
select
Кажется, не очень хорошо с изменениемIFS
.( IFS=$'\n'; select file in $(find -maxdepth 2 -name '*.txt'); do echo "$file"; done; )
Две маленькие функции помогут вам решить эту проблему, если ваши имена файлов не содержат символов новой строки или других непечатных символов. (Он обрабатывает имена файлов, которые содержат пробелы.)
пример
источник
pom.xml
никогда не будет содержать пробелов (:findnum
?Вы могли бы получить заголовок общего объема производства и хвост его с -1. это может направить вывод в любую другую команду или редактор, например.
(достань мне 100 строк и напиши мне, наконец, 100 трубок) найди. | голова -100 | хвост -1
Вы получите 100-ю строку поиска.
источник
Если ваша цель - редактировать файлы после поиска, попробуйте sag / sack .
Пример:
... затем редактировать последний результат поиска ....
Преимущество заключается в том, что вы можете вернуться позже, отредактировав первый результат поиска с помощью
источник