特定のファイルのコピーを除外するcpコマンド


回答:


57

使用rsync

rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination

sourcesource/は異なることに注意してください。末尾には、フォルダの内容をコピーするための手段スラッシュ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/{}' ';'

これは、ターゲットディレクトリ構造がソースの構造と同じであることを前提としています。

コピー元: https : //stackoverflow.com/a/4586025/749232


3

ゲームの後期ですが、プレーン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

1
ネガティブマッチの場合shopt -s extglob、拡張グロブを有効にする必要があります。また、エクスポートする必要もありません。GLOBIGNORE現在のシェルの動作を変更するためのもので、ほとんどの子プログラムはそれを気にしません。
ムル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.