cd /tmp/backup
find . -name '*.php' | cpio -pmud /home/mysite/public_html
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?
cd /tmp/backup
find . -name '*.php' | cpio -pmud /home/mysite/public_html
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.
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.)
Experimente: cp /tmp/backup/*/*.php /home/mysite/public_html/
find /tmp/backup/ -name "*.php" | xargs -I % cp % /home/mysite/public_html
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