サブディレクトリのすべての* .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.sh
。file2.sh
答え1
あなたの例があなたの説明と一致しないようです。私の考えであなたが欲しいと言ったのはこれです。
*.sh
ユーザーディレクトリのすぐ下にある不明なサブディレクトリ内のすべてのファイルと一致します。/home
- ファイルをターゲットの不明なサブディレクトリに配置します。
/home
宛先パスに含まれない
上記で判断すると、/home
このコマンドはすべてのファイルを一致させ、*/*.sh
そのファイルとその部分パスをターゲットにコピーします。 (--dry-run
予想結果に満足したら削除してください。)
rsync --dry-run -avR /home/./*/*.sh /target
たとえば、/home/subdir/file.sh
次の場所にコピーされます。/target/subdir/file.sh