Вы можете использовать find
для создания набора файлов, удовлетворяющих вашим трем критериям:
11.*
или14.*
*.bin
, а затем передать этот список в rsync
для обработки:
find mnt/IP/ftp/123/./ -mtime -1 \( -path '*/1[14].*/*' -prune \) -name '*.bin' -print0 |
rsync -av --files-from - --from0 --prune-empty-dirs / dst/
Я использовал -print0
и -from0
, чтобы обеспечить правильную обработку файлов с неожиданными символами в именах. Дополнительный /./
в пути find
указывает rsync
, что все, что находится перед этим компонентом, должно быть удалено из пути назначения. (Если вы решите использовать относительный путь в find
(, то есть такой, который не начинается с /
), измените источник rsync
с /
на .
.)
Пример сценария
# All files in the example
find /mnt/IP/ftp/123/./ -type f
/mnt/IP/ftp/123/./11.one/7.skip/skip.bin
/mnt/IP/ftp/123/./11.one/item.bin
/mnt/IP/ftp/123/./12.skip/item.bin
/mnt/IP/ftp/123/./14.one/item.bin
/mnt/IP/ftp/123/./item.bin
/mnt/IP/ftp/123/./sub/13.skip/item.bin
/mnt/IP/ftp/123/./sub/14.next/item.bin
/mnt/IP/ftp/123/./sub/14.next/skip.this
/mnt/IP/ftp/123/./sub/item.bin
# Files matched by "find"
find mnt/IP/ftp/123/./ -mtime -1 \( -path '*/1[14].*/*' -prune \) -name '*.bin' -print
/mnt/IP/ftp/123/./11.one/item.bin
/mnt/IP/ftp/123/./14.one/item.bin
/mnt/IP/ftp/123/./sub/14.next/item.bin
# Files copied by "rsync"
find /mnt/IP/ftp/123/./ -mtime -1 \( -path '*/1[14].*/*' -prune \) -name '*.bin' -print0 |
rsync -av --files-from - --from0 --prune-empty-dirs / dst/
building file list... done
11.one/
11.one/item.bin
14.one/
14.one/item.bin
sub/
sub/14.next/
sub/14.next/item.bin