复制/移动整个文件夹但具有某些扩展名

复制/移动整个文件夹但具有某些扩展名

我的网站的备份副本位于 /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

相关内容