Как я могу редактировать все файлы, найденные в vi в Linux?

Что-то, что я делаю много, это запустить команду find, а затем редактировать все из них в vi, что выглядит примерно так:

> find . "*.txt" ./file1.txt ./file2.txt ./path/to/file3.txt > vi ./file1.txt ./file2.txt ./path/to/file3.txt 

Есть ли умный и простой способ сделать это все в одной командной строке?

Это должно сделать трюк:

 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 открывать каждый файл на новой вкладке. Я считаю это более удобным, чем просто использование буферов, но если вы этого не сделаете, просто оставьте эту опцию.

  • Как я могу отменить «отметить раздел как активный» с помощью live CD на GParted / Linux?
  • Как вы протираете незапланированное дисковое пространство?
  • Я могу использовать Telnet в системе CentOS Linux, но не могу использовать SSH. Мои коллеги говорят, что могут использовать SSH
  • Dnsmasq без изменения файла / etc / hosts вручную
  • Где установлена ​​типичная программа Linux
  • Linux: обмен беспроводным подключением через тот же беспроводной интерфейс
  • Как я могу присвоить команду sudo?
  • Почему dd копирует только 128 байтов из / dev / random, когда я запрашиваю больше?
  • Рекурсивно считать все файлы в каталоге
  • Как установить gpg2 как стандартную реализацию gpg на debian?
  • Запуск перфоратора без прав root
  • Давайте будем гением компьютера.