Kiedy używam find
, często znajduje wiele wyników takich jak
find -name pom.xml
./projectA/pom.xml
./projectB/pom.xml
./projectC/pom.xml
Często chcę wybrać tylko określony wynik (np edit ./projectB/pom.xml
.). Czy istnieje sposób wyliczenia find
danych wyjściowych i wybrania pliku do przekazania do innej aplikacji? lubić:
find <print line nums?> -name pom.xml
1 ./projectA/pom.xml
2 ./projectB/pom.xml
3 ./projectC/pom.xml
!! | <get 2nd entry> | xargs myEditor
?
[Edytuj] Wpadłem na kilka zwyczajnych błędów z niektórymi wymienionymi rozwiązaniami. Chciałbym więc wyjaśnić, jak odtworzyć:
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>
[Edytuj] Rozwiązanie 1 Do tej pory kombinacja 'nl' (wyjście enumirate), głowa i ogon wydają się działać, jeśli połączę je w funkcje i użyję $ (!!).
to znaczy:
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.
[Edytuj] Rozwiązanie 2 Wydaje się, że całkiem dobrze działa również użycie „wybierz”. dawny:
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
spełniasz swoje wymagania? (Z linii:!! | head -2 | xargs myEditor
)Odpowiedzi:
Użyj
bash
wbudowanegoselect
:W przypadku pytania „bonusowego” dodanego w komentarzu:
źródło
select
wydaje się nie pasować do przerabianiaIFS
.( IFS=$'\n'; select file in $(find -maxdepth 2 -name '*.txt'); do echo "$file"; done; )
Dwie małe funkcje pomogą ci rozwiązać ten problem, pod warunkiem, że twoje nazwy plików nie zawierają znaków nowej linii ani innych niedrukowalnych znaków. (Obsługuje nazwy plików zawierające spacje).
Przykład
źródło
pom.xml
nigdy nie będzie zawierała białych znaków (:findnum
?możesz uzyskać nagłówek łącznych wyników i ogonić go -1. może to przesyłać dane wyjściowe w dowolnym innym poleceniu lub edytorze, np.
(zdobądź mi 100 linii i wydrukuj mi w końcu fajkę 100) znajdź. | głowa -100 | ogon -1
dostaniesz setną linię znalezienia.
źródło
Jeśli Twoim celem jest edycja plików po wyszukiwaniu, spróbuj sag / sack .
Przykład:
... a następnie edytować ostatni wynik wyszukiwania ....
Zaletą jest to, że możesz później wrócić do edycji pierwszego wyniku wyszukiwania
źródło