Как я могу редактировать все файлы, найденные в vi в Linux?
Что-то, что я делаю много, это запустить команду find, а затем редактировать все из них в vi, что выглядит примерно так:
> find . "*.txt" ./file1.txt ./file2.txt ./path/to/file3.txt > vi ./file1.txt ./file2.txt ./path/to/file3.txt
Есть ли умный и простой способ сделать это все в одной командной строке?
- Rsync N новых файлов в каталоге
- Как скопировать файлы на ненадежный компьютер?
- Можно ли удалить системный раздел системы Windows 7 без проблем?
- Кто-нибудь знает, почему rsync будет продолжать отправлять файлы снова и снова?
- Возможно ли установить конкретный каталог на сервере Linux на локальную машину Windows?
- Как эта стратегия резервного копирования работает?
- Возможно ли запустить двоичный файл x86 на процессоре ARM?
- Предупреждение: раздел X не заканчивается на границе цилиндра. Должен ли я заботиться / как исправить?
- Mint map number keys to higlight text
- Уменьшение переключения режима видео во время загрузки Linux
- Самый простой способ создать Live Live CD
- Не удалось экспортировать переменную через файл сценария
- Пакетные файлы для кодирования
Это должно сделать трюк:
find . -name "*.txt" -exec vim {} +
Используйте Vim, это лучше для вашего здоровья. 🙂
Опция частотного вида -exec
делает все имена файлов (вплоть до ограничений длины строки) отображаемыми в одной строке, т. Е. Вы все равно получаете все файлы, открытые в одном сеансе vim
(с помощью :n
для следующего и :N
для предыдущего файла) ,
С помощью vim -p
вы получаете вкладку файла для каждого файла. Проверьте :help tab-page-commands
для получения более подробной информации.
С помощью vim -o
вы получите горизонтально разделенные окна для каждого файла, vim -O
вертикально разделенные окна. Проверьте :help window-move-cursor
для получения более подробной информации.
Обратите внимание, что предыдущая версия этого ответа vim $(find . -name "*.txt")
не работает с пробелами в именах файлов и имеет последствия для безопасности.
Трубопровод в xargs vi
дает Warning: Input is not from a terminal
, плюс терминал с полностью фиктивным поведением. Грамотность пользователей объясняет, почему в комментарии ниже, и с немного более подробным объяснением в этом вопросе .
Или запустите vim и оттуда:
:args **/*.txt
Кроме того, если вы хотите, чтобы они открывались по одному, вы также можете использовать find -exec или использовать простой цикл. Отредактированный комментарий к ceving.
find . -name "*.txt" -exec vi {} \;
или
OLDIFS=$IFS IFS=$(echo -en "\n\b") for i in `find . -name "*.txt"` do vi $i done IFS=$OLDIFS
Если вы уже набрали команду find, я обнаружил, что для открытия результатов поиска может быть гораздо проще использовать xargs
:
find . -name "*.txt" | xargs vim -p
Параметр -p
указывает vim открывать каждый файл на новой вкладке. Я считаю это более удобным, чем просто использование буферов, но если вы этого не сделаете, просто оставьте эту опцию.