Como usar o find para substituir vários arquivos de mesmo nome

2

Eu tenho vários arquivos com o mesmo nome (digamos, somefile.php) espalhados em vários diretórios em / var /

Se eu quiser substituir todos eles por uma nova versão do somefile.php localizada em, digamos, /home/me/somefile.php ... como eu faria isso? Cada resultado de pesquisa encontrado está relacionado à substituição de texto em um arquivo , mas eu quero substituir o arquivo inteiro .

Eu sei que posso encontrar todos os arquivos com:

find /var/ -type f -name somefile.php 

Mas não sei como mover o /home/me/somefile.php para os resultados e substituí-los por todos.

    
por Callmeed 25.08.2010 / 23:21

3 respostas

3

encontre / var -type -f -name somefile.php -exec cp /home/me/somefile.php {} \;

tenha cuidado!

    
por 25.08.2010 / 23:46
0

Como você vê, isso também funciona com arquivos com espaços em branco:

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$ 

É isso que você queria?

    
por 25.08.2010 / 23:56
0

Versão livre de extensão GNU:

find /var -name somefile.php | while read LINE; do cp /home/me/somefile.php "$LINE"; done

    
por 26.08.2010 / 02:08