11.*と14.*(サブフォルダを含む)で始まり、1日以内のフォルダにある.binファイルのみrsyncしようとしています。
私が今まで試したこと:
rsync -Rarv `find /mnt/IP/ftp/123/ -type f -mtime -1` --prune-empty-dirs --include "1[1][4]./" --include="*.bin" --exclude="*" "/mnt/IP/ftp/123/" "/home/ftp/123/"
通常は動作しますが、Rsyncはターゲット内に同じ名前のディレクトリを作成します:/home/ftp/123/mnt/IP/ftp/123/
そのため、11.*または14.*で始まるフォルダのみを再生成するソリューションを探しています。
ベストアンサー1
この回答は「1日以内」の制限を考慮しません。
努力する代わりに出力の解析find
、rsync
直接使用~から find
:
find /mnt/IP/ftp/123 -type -name '1[14].*' -prune \
-exec rsync -av \
--include='*.bin' --include='*/' \
--exclude='*' --prune-empty-dirs {} /home/ftp/123 ';'
11.
名前がin14.
またはunderで始まるディレクトリを探します/mnt/IP/ftp/123
。これらの各ディレクトリについて、検索リストからディレクトリを削除して(を使用して-prune
)、次の手順を実行します。
rsync -av --include='*.bin' --include='*/' \
--exclude='*' --prune-empty-dirs {} /home/ftp/123
ここでは、{}
見つかったディレクトリのパス名に置き換えられます。
このrsync
コマンドは、/home/ftp/123
見つかったディレクトリと同じファイル名(11.
またはで始まる14.
など)のサブディレクトリを作成し、ファイルをコピーし.bin
ます。
使用される包含および除外パターンrsync
(最初の一致の勝利):
--include='*.bin'
:ファイル名が.で終わるすべてのファイルを含みます.bin
。--include='*/'
:すべてのディレクトリを含みます。これにより、ターゲットの空のディレクトリが失われます--prune-empty-dirs
。--exclude='*'
: 前のルールに含まれていない項目を除外します。