
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.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