rsync
rsync
é uma ferramenta disponível para janelas também , normalmente usada para sincronizar o diretório ... mas funciona bem no diretório local também ... como indicado em sua própria descrição
a fast, versatile, remote (and local) file-copying tool
A partir desta resposta em unix.stackexchange ...
rsync -a --prune-empty-dirs --include '*/' --include '*.txt' --exclude '*' source/ target/
Note que existe uma opção para excluir os arquivos da origem que você pode incluir na linha de comando, acho que o que você procura é --remove-source-files
, mas verifique cuidadosamente . Outra opção que você pode achar útil é -n
-n, --dry-run perform a trial run with no changes made
--remove-source-files sender removes synchronized files (non-dir)
encontrar
find
é outra ferramenta que você pode encontrar no seu bash
shell no windows, assim como um executável compilado (gnu findutils ) ...
A linha a seguir funciona no Linux, mas você pode modificar a instrução cp
para estar em conformidade com as especificações do seu sistema. De outra resposta ...
find . -name '*.txt' -exec cp --parents \{\} /target \;
Equivalente ao Windows de find
De outro quesiton / answer para o seu script em lote, você pode use estas dicas ...
dir <drive: [drive:]> /s | findstr /i <pattern>
... claro que se eles sentiram a necessidade de fazer um poder shell é razoável esperar que em esse ambiente deva haver uma maneira mais simples de fazer isso ...
mas talvez o seguinte seja um ponto de partida simples suficiente para o seu script:
dir c:\foo /s *.txt