固定の最大深度を持つサブディレクトリ内の特定のファイルタイプのみをrsyncする

固定の最大深度を持つサブディレクトリ内の特定のファイルタイプのみをrsyncする

1 つのサブディレクトリ内のすべての *.sh ファイルを同期したいです。このコマンドを試しましたが、特定のファイル タイプだけではなく、ディレクトリ内のすべてのファイルが同期されます。

rsync -vr -n --include="*.sh" --exclude="*/*/" --prune-empty-dirs /source /target

次のようなフィルターも追加してみました

--filter="+ *.sh"

しかし、結果は変わりませんでした。別のフィルター

rsync -vr -n --include="*.sh" --filter="-! *.sh" --exclude="*/*/" --prune-empty-dirs

空のリストが表示されます。「*」を除外すると、「*.sh」も除外されます...何が間違っているのでしょうか? ありがとうございます!

深さは1である必要があります - サブディレクトリの名前は不明です。たとえば、

home/subdirectory1/subsubdirectory/subsubsubdirectory/file.sh
home/subdirectory1/file1.sh
home/subdirectory2/file2.sh
home/subdirectory3/file

上記の例では、rsyncホームから開始し、ディレクトリ階層とファイルのみを同期しfile1.shfile2.sh

答え1

あなたの例はあなたの説明と一致していないようです。あなたが望んでいるのはこれだと思います。

  • *.sh直下の不明なサブディレクトリ内のすべてのファイルに一致します/home
  • ターゲット上の不明なサブディレクトリにファイルを置く
  • /home宛先パスに含めない

から見ると/home、このコマンドはすべてのファイルを一致させ*/*.sh、それらとその部分パスをターゲットにコピーします。(--dry-run意図した結果に満足している場合は を削除します。)

rsync --dry-run -avR /home/./*/*.sh /target

例えば、/home/subdir/file.shコピー先は/target/subdir/file.sh

関連情報