Sesuatu yang sering saya lakukan adalah menjalankan perintah find dan kemudian mengedit semuanya secara vi, yang terlihat seperti ini:
> find . "*.txt"
./file1.txt
./file2.txt
./path/to/file3.txt
> vi ./file1.txt ./file2.txt ./path/to/file3.txt
Apakah ada cara pintar & sederhana untuk melakukan ini semua dalam satu baris perintah?
xargs
menghancurkan terminal shell saya. Solusi yang tepat adalah yang di bawah ini oleh @DevSolarJawaban:
Ini harus melakukan trik:
Gunakan Vim, lebih baik untuk kesehatan Anda. :-)
Opsi yang sering diabaikan
+
untuk-exec
membuat semua nama file (hingga batas panjang garis) muncul dalam satu baris, yaitu Anda masih mendapatkan semua file dibuka dalam satuvim
sesi (navigasikan dengan:n
untuk:N
file berikutnya dan sebelumnya).Dengan
vim -p
Anda mendapatkan tab file untuk setiap file. Periksa:help tab-page-commands
lebih detail.Dengan
vim -o
Anda akan mendapatkan windows split secara horizontal untuk setiap file,vim -O
secara vertikal membagi windows. Periksa:help window-move-cursor
lebih detail.Perhatikan bahwa versi sebelumnya dari jawaban ini
vim $(find . -name "*.txt")
,, tidak berfungsi dengan spasi di nama file, dan memiliki implikasi keamanan.Perpipaan menjadi
xargs vi
memberiWarning: Input is not from a terminal
, plus terminal dengan perilaku benar-benar palsu sesudahnya. Grawity pengguna menjelaskan alasannya di komentar di bawah ini, dan dengan sedikit penjelasan lebih lanjut dalam pertanyaan ini .sumber
/dev/tty
dan memanggil ioctl () untuk itu; terlalu malas untuk melakukannya.) Ketika dipanggil oleh xargs, vim menerima/dev/null
sebagai input standar, yang hanya mengabaikan ioctls kontrol-terminal.vim -p
jika Anda ingin tab file. (gt
dangT
untuk bernavigasi, atau klik dengan mouse Anda.)vim
, cukup tentukan-
sebagai argumen pertama, seperti padaecho foobar | vim -
.find . -name "*.txt" | vim -
memberi Anda sesi vim pada file yang tidak disebutkan namanya yang berisi nama - nama file yang ditemukan, yang bukan apa yang diminta OP ...Atau jalankan vim dan dari sana:
sumber
Selain itu, jika Anda ingin mereka membuka satu per satu, Anda juga dapat menggunakan find -exec atau menggunakan simple untuk loop. Diedit per komentar ceving.
atau
sumber
-name
tidak ada. Dan kedua: perintah gagal total segera setelah nama file berisi spasi. -1 untuk jawaban yang keliru.Jika Anda sudah mengetikkan
find
perintah, saya menemukan bahwa bisa lebih mudah digunakanxargs
untuk membuka hasil pencarian:The
-p
pilihan memberitahu vim untuk membuka setiap file di tab baru. Saya menemukan ini lebih nyaman daripada hanya menggunakan buffer, tetapi jika Anda tidak maka tinggalkan opsi itu.sumber
Untuk mengedit semua
*.txt
, Anda hanya dapat menjalankan:vim *.txt
. Untuk mengedit file yang dikembalikan olehfind
, baca lebih lanjut.Pada Unix / macOS, Anda dapat menggunakan
find
dengan BSDxargs
(lihatman xargs
:), misTerkait: Terminal borked setelah memohon Vim dengan xargs di Vim.SE.
sumber