特定の拡張子を含むフォルダ全体のコピー/移動

特定の拡張子を含むフォルダ全体のコピー/移動

/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 を使用してまずターゲットディレクトリを作成し、ファイルをコピーします。最初の2行~/.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'

zcp(ここでzshは必要に応じてターゲットディレクトリを作成する方法がないため、標準的なアプローチに比べて利点はありません。)

答え4

find /tmp/backup/ -name "*.php" | xargs -I % cp % /home/mysite/public_html

関連情報