Copiar / mover pasta inteira, mas com certas extensões

2

Eu tenho uma cópia de backup do meu site localizada em / tmp / backup e quero copiá-la para / home / mysite / public_html Mas meu objetivo é copiar apenas os arquivos .php (com pastas aninhadas) e substituir.

Se eu não tiver pastas aninhadas, simplesmente faço cp /tmp/backup/*.php /home/mysite/public_html

Mas como posso fazer isso em todo o site com muitas pastas?

    
por Gilles 02.06.2011 / 13:25

6 respostas

4

cd /tmp/backup
find . -name '*.php' | cpio -pmud /home/mysite/public_html
    
por 02.06.2011 / 13:52
1

Em versões recentes do bash, você pode habilitar o globstar ( shopt -s globstar ), e então:

cd /tmp/backup
tar cvf - **/*.php | tar xvf - -C /home/mysite/public_html

** corresponde a todos os arquivos, diretórios e subdiretórios

Estou usando tar aqui porque preserva a estrutura de diretórios.

    
por 02.06.2011 / 13:48
1

Com as ferramentas POSIX, use pax (a substituição POSIX para tar e cpio ):

cd /tmp/backup
find . -name '*.php' | pax -rw -pp /home/mysite/public_html

Com o zsh, primeiro crie os diretórios de destino e copie os arquivos. Coloque as duas primeiras linhas no seu ~/.zshrc .

autoload zmv
alias zcp='zmv -C' zln='zmv -L'
cd /tmp/backup
mkdir -p **/*.php(e\''REPLY=/home/mysite/public_html/${REPLY:h}'\')
zcp '(**/)(*.php)' '/home/mysite/public_html/$1$2'

(Aqui, o zsh não tem vantagem sobre o método padrão, porque zcp não tem como criar diretórios de destino conforme necessário.)

    
por 02.06.2011 / 19:39
0

Experimente: cp /tmp/backup/*/*.php /home/mysite/public_html/

    
por 02.06.2011 / 13:28
-1
find /tmp/backup/ -name "*.php" | xargs -I % cp % /home/mysite/public_html
    
por 02.06.2011 / 13:56
-1

atualizou a resposta execute o comando abaixo um após o outro. isso preservará a estrutura do diretório também :

cp /tmp/backup /home/mysite/public_html
find /home/mysite/public_html -not -name "*.php"|xargs rm -rf
    
por 02.06.2011 / 13:30