Rsync
rsync
это инструмент, доступный и для Windows , обычно используемый для удаленной синхронизации каталога ... но он прекрасно работает и для локального каталога ... как указано в его собственном описании
быстрый, универсальный, удаленный ( и локальный ) инструмент для копирования файлов
Из этого ответа на unix.stackexchange ...
rsync -a --prune-empty-dirs --include '*/' --include '*.txt' --exclude '*' source/ target/
Обратите внимание, что существует опция для удаления файлов из источника, которые вы можете включить в командную строку, я думаю, что вы ищете --remove-source-files
, но проверьте это внимательно . Другой вариант, который вы можете найти полезным-n
-n, --dry-run perform a trial run with no changes made
--remove-source-files sender removes synchronized files (non-dir)
находить
find
это еще один инструмент, который вы можете найти в своей bash
оболочке под windows, а также скомпилированный исполняемый файл (gnu findutils ) ... Следующая строка работает под Linux, но вы можете изменить cp
оператор, чтобы он соответствовал спецификациям вашей системы. Из другого ответа ...
find . -name '*.txt' -exec cp --parents \{\} /target \;
Windows эквивалент find
Из другого вопроса / ответа для вашего пакетного скрипта вы можете использовать эти подсказки ...
dir <drive: [drive:]> /s | findstr /i <pattern>
... конечно, если они чувствовали необходимость в силовой оболочке, разумно ожидать, что в этой среде должен быть более простой способ сделать это ...
но, может быть, следующая является достаточно простой отправной точкой для вашего сценария:
dir c:\foo /s *.txt