Ketika saya gunakan find
, sering menemukan beberapa hasil seperti
find -name pom.xml
./projectA/pom.xml
./projectB/pom.xml
./projectC/pom.xml
Saya sering ingin memilih hanya hasil tertentu, (misalnya edit ./projectB/pom.xml
). Apakah ada cara untuk menghitung find
output dan memilih file untuk masuk ke aplikasi lain? Suka:
find <print line nums?> -name pom.xml
1 ./projectA/pom.xml
2 ./projectB/pom.xml
3 ./projectC/pom.xml
!! | <get 2nd entry> | xargs myEditor
?
[Sunting] Saya telah menemukan beberapa bug aneh dengan beberapa solusi yang disebutkan. Jadi saya ingin menjelaskan langkah-langkah untuk mereproduksi:
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>
[Sunting] Solusi 1 Sejauh ini kombinasi 'nl' (enumirate output), head & tail tampaknya berfungsi jika saya menggabungkannya ke dalam fungsi dan menggunakan $ (!!).
yaitu:
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.
[Sunting] Solusi 2 Menggunakan "pilih" tampaknya bekerja dengan cukup baik. ex:
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
memenuhi persyaratan Anda? (Dengan baris Anda:!! | head -2 | xargs myEditor
)Jawaban:
Gunakan
bash
bawaanselect
:Untuk pertanyaan "bonus" yang ditambahkan dalam komentar:
sumber
select
tampaknya tidak cocok dengan perubahanIFS
.( IFS=$'\n'; select file in $(find -maxdepth 2 -name '*.txt'); do echo "$file"; done; )
Dua fungsi kecil akan membantu Anda menyelesaikan masalah ini asalkan nama file Anda tidak mengandung baris baru atau karakter non-cetak lainnya. (Itu menangani nama file yang mengandung spasi.)
Contoh
sumber
pom.xml
tidak akan pernah berisi spasi putih (:findnum
?Anda bisa mendapatkan kepala dari total output dan mengikutinya dengan -1. ini dapat menyalurkan output dalam perintah atau editor lain misalnya.
(dapatkan saya 100 baris dan cetak saya di pipa terakhir 100) temukan. | kepala -100 | ekor -1
akan membuat Anda menemukan garis ke-100.
sumber
Jika tujuan Anda adalah mengedit file setelah pencarian, coba sag / sack .
Contoh:
... lalu edit hasil pencarian terakhir ....
Keuntungannya adalah Anda dapat kembali mengedit hasil pencarian pertama
sumber