How can I edit all the files returned by find in vi in Linux?
This should do the trick:
find . -name "*.txt" -exec vim {} +
Use Vim, it's better for your health. :-)
The oft-overlooked +
option to -exec
makes all filenames (up to line length limits) appear in one line, i.e. you still get all the files opened in one vim
session (navigated with :n
for next and :N
for previous file).
With vim -p
you get a file tab for each file. Check :help tab-page-commands
for more details.
With vim -o
you will get horizontally split windows for each file, vim -O
vertically split windows. Check :help window-move-cursor
for more details.
Note that the previous version of this answer, vim $(find . -name "*.txt")
, does not work with spaces in filenames, and has security implications.
Piping into xargs vi
gives a Warning: Input is not from a terminal
, plus a terminal with completely bogus behaviour afterwards. User grawity explained why in a comment below, and with a bit more explanation in this question.
Or run vim and from there:
:args **/*.txt