У меня есть несколько файлов с одинаковым именем (скажем, somefile.php), разбросанных в нескольких каталогах в / var /
Если я хочу заменить их все новой версией somefile.php, расположенной, скажем, в /home/me/somefile.php ... как бы я это сделал? Каждый результат поиска, который я нахожу, связан с заменой текст в файле но я хочу заменить весь файл.
Я знаю, что могу найти все файлы с:
find /var/ -type f -name somefile.php
Но я не уверен, как переместить /home/me/somefile.php в результаты и заменить их все.
найти / var -type -f -name somefile.php -exec cp /home/me/somefile.php {} \;
быть осторожен!
Версия без расширений GNU:
find /var -name somefile.php | while read LINE; do cp /home/me/somefile.php "$LINE"; done
Как видите, это работает и с файлами с пробелами:
hoeha@dw:/tmp/test$ mkdir my\ dir{1,2,3}/ ; touch my\ dir{1,2,3}/file\ to\ replace
hoeha@dw:/tmp/test$ tree
.
├── my dir1
│ └── file to replace
├── my dir2
│ └── file to replace
└── my dir3
└── file to replace
3 directories, 3 files
hoeha@dw:/tmp/test$ echo "the new one" > the\ new\ one
hoeha@dw:/tmp/test$ find . -type f -name 'file to replace' -exec cp the\ new\ one \{\} \; -execdir mv \{\} the\ new\ one \;
hoeha@dw:/tmp/test$ tree
.
├── my dir1
│ └── the new one
├── my dir2
│ └── the new one
├── my dir3
│ └── the new one
└── the new one
3 directories, 4 files
hoeha@dw:/tmp/test$ cat my\ dir1/the\ new\ one
the new one
hoeha@dw:/tmp/test$ find -version | head -1
find (GNU findutils) 4.4.2
hoeha@dw:/tmp/test$
Вы этого хотели?