コマンド「cp」を使用してディレクトリをコピーし、その中の特定のファイル/サブディレクトリを除外する方法はありますか?
rsync
を使用します。
rsync -av --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination
source
とsource/
の使用は異なることに注意してください。末尾のスラッシュは、フォルダーsource
の内容をdestination
にコピーすることを意味します。末尾のスラッシュがない場合、フォルダーソースをdestination
にコピーすることを意味します。
あるいは、除外するディレクトリ(またはファイル)が多数ある場合は、--exclude-from=FILE
を使用できます。ここで、FILE
は、除外するファイルまたはディレクトリを含むファイルの名前です。
--exclude
には、--exclude=*/.svn*
などのワイルドカードを含めることもできます
コピー元:https://stackoverflow.com/a/2194500/749232
cp
自体を使用する場合:
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
これは、ターゲットのディレクトリ構造がソースのディレクトリ構造と同じであることを前提としています。
ゲームの後期ですが、プレーンbashとcpを使用した非常に異なるソリューションがあります。一部のファイルを無視しながら、グローバルファイル仕様を使用できます。
ディレクトリにファイルが含まれていると仮定します。
$ ls *
listed1 listed2 listed3 listed4 unlisted1 unlisted2 unlisted3
GLOBIGNORE 変数を使用する:
$ export GLOBIGNORE='unlisted*'
$ ls *
listed1 listed2 listed3 listed4
または、より具体的な除外あり:
$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1 listed2 listed3 listed4 unlisted3
または 否定一致 を使用:
$ ls !(unlisted*)
listed1 listed2 listed3 listed4
これは、いくつかの一致しないパターンもサポートしています。
$ ls !(unlisted1|unlisted2)
listed1 listed2 listed3 listed4 unlisted3