ディレクトリ内のすべてのファイルはコピーされますが、サブディレクトリ内の特定のファイルはコピーされません。

ディレクトリ内のすべてのファイルはコピーされますが、サブディレクトリ内の特定のファイルはコピーされません。

私のディレクトリ構造は次のとおりです。

source-dir---
            |----- file-1
            |----- file-2
            |----- file-3
            |----- folder-1
                      |---- file-4
                      |---- file-5

ソースディレクトリ内のすべてのファイルをターゲットディレクトリにコピーし、同じフォルダ構造を維持したいのですが、file-5サブディレクトリからコピーしたくありません。

予想されるターゲットディレクトリは次のとおりです。

destination-dir---
                 |----- file-1
                 |----- file-2
                 |----- file-3
                 |----- folder-1
                           |---- file-4

cpコマンド自体を使用して上記の動作を達成できますか?それとも使用する特定のrsync正規表現コマンドがありますか?find

ベストアンサー1

これはうまくいきます。除外します。file-5サブディレクトリのすべてのレベルからコピーsourceディレクトリですが、最上位レベルに存在する場合はそうではありません。

cd /path/to/source
find . ! -path './*/file-5' -type d,f -exec sh -c '
    [ -d "$1" ] && echo mkdir -vp "/path/to/dest/$1" || echo cp -v "$1" "/path/to/dest/$1"
' sh_cp {} \;

特定のサブディレクトリからのみ特定のファイルを除外するには、そのディレクトリからのみそのファイルを./folder-1/file-5除外するかのように厳密に言及してください。

テストの実行結果に満足したら、echo前のコマンドを削除してください。mkdircp

おすすめ記事