約100GBのディレクトリがあります。特定のフォルダをスキップしてこのディレクトリを別の場所にコピーする必要があります(フォルダが多い)。以下は私の要件を示す壊れたコードです。
$ cp -r ~/directory_to_copy /path/to/copy --skip=foo --skip=bar
このコマンドには例の結果があります。元のディレクトリツリーは次のとおりです。
~/directory_to_copy
aaa
foo
doo
bar
bbb
ccc
ddd
bar
eee
コピーされたツリー
/path/to/copy/
aaa
doo
bbb
ccc
ddd
eee
私の目的に合わせてコマンドを書くにはどうすればよいですか?
答え1
あなたが望むrsync
:
rsync -va --exclude=foo --exclude=bar ~/directory_to_copy /path/to/copy
--exclude
不要なファイルやディレクトリを除外するために使用されます。
-v
rsyncを冗長にします(オプション)。
-a
rsync に再帰的にコピーし、ファイル属性を保存するように指示します。これはオプションですが、使用しない場合は再帰コピーを-a
使用できます。-r
より複雑な要件の場合は、除外オプションと埋め込みオプションを指定できます。オプションを指定し-F
、.rsync-filter
ソースディレクトリ階層の別の場所にファイルを配置して、あるディレクトリから別のディレクトリに除外/含める設定を変更することもできます。man rsync
詳細があります。
答え2
find
あなたはそれを使用することができます
find -depth ! -wholename '*foo*' ! -wholename '*bar*' -exec cp --parents '{}' /target/dir/ \;
a)最初に省略する必要があるディレクトリを見つけ、b)-depth
コピーするときにフルパスを生成する--parents
オプションを使用する必要がありますcp
。
ただし、空のフォルダもスキップされます。 findが./firstDIRに達すると、すべてのファイルがコピーされるため使用-r
できません。cp