あるディレクトリから別のディレクトリにコンテンツをコピーするときに特定のフォルダを除外する

あるディレクトリから別のディレクトリにコンテンツをコピーするときに特定のフォルダを除外する

aim-db-dirフォルダの一部のコード内容を別のフォルダにコピーする必要がありますaim-db-dir_nosvnaim-db-dirすべてのディレクトリ(およびサブディレクトリ)には.svnフォルダが含まれており、これらの.svnフォルダには私が気にしないいくつかのフォルダとファイルが含まれています。aim-db-dir.svnフォルダとその内容を除くディレクトリとサブディレクトリのすべての内容をコピーしたいと思います。

それで、私の質問はどうすればいいのかということです。読みrsyncましたが、ディレクトリとファイルパターンを除外できるかどうかはわかりません。また、findとcpを試してみましたが、何かが抜けました。

私が試しているコマンドは次のとおりです。 (動作しない) -

find aim-db-dir/* -not -name ".svn" | sed -n 's|^aim-db-dir/||p' -exec cp -R "{}" "aim-db-dir_nosvn/{}" \;

私も使ってみようかと思いはしてみましたが、xargs一度も書いたことがなくて使うことができるかもしれませんね。さまざまなソリューションを高く評価します!

答え1

findGNUとGNUの使用cpio

find /path/to/aim-db-dir -name .svn -prune -o -print0 | cpio -padmv0 /path/to/aim-db-dir_nosvn

そしてrsync

rsync -av -exclude=.svn /path/to/aim-db-dir/ /path/to/aim-db-dir_nosvn

末尾のスラッシュが重要です。スラッシュがない場合、/path/to/aim-db-dir/inというディレクトリが作成されます。aim-db-diraim-db-dir_nosvn

GNUの使用tar:

tar cpf - --exclude-vcs -C /path/to/aim-db-dir . | tar xvpf - -C /path/to/aim-db-dir_nosvn

tarデフォルトのPAX形式の制限により、コピーに使用できるファイルパスの最大長に制限があります。

関連情報