我的网站的备份副本位于 /tmp/backup 中,并希望将其复制到 /home/mysite/public_html 但我的目标是仅复制 .php 文件(带有嵌套文件夹)并替换。
如果我没有嵌套文件夹,我只需这样做cp /tmp/backup/*.php /home/mysite/public_html
但是我如何才能为具有许多文件夹的整个网站做到这一点呢?
答案1
cd /tmp/backup
find . -name '*.php' | cpio -pmud /home/mysite/public_html
答案2
在最新版本的 bash 上,您可以启用 globstar ( shopt -s globstar
),然后执行以下操作:
cd /tmp/backup
tar cvf - **/*.php | tar xvf - -C /home/mysite/public_html
** 匹配所有文件、目录和子目录
我在这里使用是tar
因为它保留了目录结构。
答案3
通过 POSIX 工具,使用帕克斯(POSIX 替换为柏油和CPIO):
cd /tmp/backup
find . -name '*.php' | pax -rw -pp /home/mysite/public_html
使用 zsh,首先创建目标目录,然后复制文件。将前两行放入您的~/.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'
(在这里,zsh 比标准方法没有优势,因为zcp
没有办法根据需要创建目标目录。)
答案4
find /tmp/backup/ -name "*.php" | xargs -I % cp % /home/mysite/public_html