Intereting Posts
Git совершает использование stdout из bash? Система LFS не загружается или GRUB не может получить доступ / bood / grub при загрузке частная память, рассчитанная на pmap, комбинация размера виртуальной памяти и размера резидентной памяти? Как я могу переместить файлы по типу рекурсивно из каталога и его подкаталогов в другой каталог? Использовать аргумент командной строки и переменную с помощью sed Inside Bash Script автоматизация конфигурации CentOS 7 с использованием сценариев оболочки Как (и нужно ли) копировать и вставлять на веб-интерфейс ssh? CONFIG_LOCALVERSION (CentOS 6.5) Как изменить цвет шрифта в терминале? вставить запятую после последней буквы Перенаправить трафик через vpn по мере необходимости Есть ли способ изменить количество процессоров, которые видит программа? Неправильно / опасно / неуместно помещать произвольные резервные копии в / var / backups? Загрузить файл с фактическим именем wget Является ли data = journal безопаснее для Ext4 в отличие от данных = упорядочен?

Добавьте одну строку ко всем найденным файлам

Моя оригинальная иерархия рабочих каталогов:

$ find . ./usr1 ./usr1/.vimrc ./usr2 ./usr2/.vimrc 

Я хочу добавить одну строку – «set number» – ко всем файлам .vimrc . Поэтому я выполнил эту команду:

 find -name ".vimrc" -exec echo "set number" >> {} \; 

Но все файлы .vimrc остаются неизменными, и в моем рабочем каталоге есть новый файл {} :

 $ find . ./usr1 ./usr1/.vimrc ./{} ./usr2 ./usr2/.vimrc 

Что не так? Как я могу сделать это правильно?

Если вы хотите перенаправить вывод команды с помощью -exec , лучше выполнить команду оболочки; Попробуйте использовать следующий синтаксис в вашем случае:

 find -name ".vimrc" -exec sh -c 'echo "set number" >> {}' \; 

Это будет работать так, как ожидалось.