最大深さが固定されたサブディレクトリのrsync固有のファイル形式のみ

最大深さが固定されたサブディレクトリのrsync固有のファイル形式のみ

サブディレクトリのすべての* .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

おすすめ記事