Como o título diz, como posso copiar recursivamente uma estrutura de diretório, mas incluir apenas alguns arquivos. Por exemplo, dada a seguinte estrutura de diretório:
folder1
folder2
folder3
data.zip
info.txt
abc.xyz
folder4
folder5
data.zip
somefile.exe
someotherfile.dll
Os arquivos data.zip e info.txt podem aparecer em qualquer lugar na estrutura de diretório. Como posso copiar a estrutura de diretório completa, mas incluir apenas arquivos denominados data.zip e info.txt (todos os outros arquivos devem ser ignorados)?
A estrutura de diretório resultante deve ser semelhante a esta:
copy_of_folder1
folder2
folder3
data.zip
info.txt
folder4
folder5
data.zip
*.zip
funcionou para mim.Uma solução alternativa que copia um arquivo por vez e não requer ROBOCOPY:
A instrução for externa gera qualquer combinação de caminho possível de subdiretório em
SOURCE_DIR
e nome emFILENAMES_TO_COPY
. Para cada arquivo existente, o xcopy é chamado.FILE_INTERMEDIATE_DIR
contém o caminho do subdiretório do arquivo dentro doSOURCE_DIR
qual precisa ser criado emDEST_DIR
.fonte
set FILENAMES_TO_COPY=data.zip info.txt
acima paraset FILENAMES_TO_COPY=*.jpg
set "SOURCE_DIR=C:\Origin Test"
eset "DEST_DIR=C:\Dest Test"
. Observe a colocação das aspas duplas.tente canalizar a saída de find (ou seja, o caminho do arquivo) para cpio
cpio verifica o carimbo de data / hora nos arquivos de destino - portanto, é seguro e rápido.
remova -v para operações mais rápidas, assim que você se acostumar com isso.
fonte
Se o Powershell for uma opção, você pode fazer o seguinte:
A principal desvantagem é que ele copia todas as pastas, mesmo que fiquem vazias porque nenhum arquivo corresponde ao filtro especificado. Então você pode acabar com uma árvore cheia de pastas vazias, além das poucas pastas que contêm os arquivos que você deseja.
fonte
rm -r -ErrorAction:SilentlyContinue d:\destinationPath
antes de copiar para consertar isso.Graças às respostas anteriores. :)
Este script denominado "r4k4copy.cmd":
Aceita variáveis de "Origem", "Destino" e "Nome do arquivo". Ele também pode copiar apenas tipos específicos de arquivos ou nomes de arquivos seletivos.
Qualquer melhoria é bem-vinda. :)
fonte
Com find e cp apenas:
fonte
Semelhante à solução de Paulius, mas os arquivos com os quais você não se importa não são copiados e depois excluídos:
fonte
Para copiar todos os arquivos de texto para G: e preservar a estrutura do diretório:
fonte
São apenas dois comandos simples, mas eu não recomendaria isso, a menos que os arquivos que você NÃO precisa copiar sejam pequenos. Isso porque isso copiará TODOS os arquivos e, em seguida, removerá os arquivos desnecessários da cópia.
Claro, o segundo comando é meio longo, mas funciona!
Além disso, essa abordagem não exige que você baixe e instale nenhuma ferramenta de terceiros (o Windows 2000+ BATCH tem comandos suficientes para isso).
fonte
No Linux e em outros sistemas UNIX, usar o
tar
comando faria isso facilmente.Então você mudaria para o alvo e:
É claro que você pode canalizar a saída do primeiro alcatrão para o segundo, mas vê-lo funcionar em etapas é mais fácil de entender e explicar. Estou faltando o cd / para / novo / caminho / necessário no comando a seguir - só não me lembro como fazer isso agora. Alguém pode adicioná-lo, espero.
Tar (gnutar) também está disponível no Windows, mas provavelmente eu mesmo usaria o
xcopy
método nessa plataforma.fonte
EDITAR: Se você quiser preservar as pastas vazias (que, ao reler sua postagem, você parece) use / E em vez de / S.
fonte
Usando a interface de linha de comando WinRAR, você pode copiar os nomes de arquivo e / ou tipos de arquivo para um arquivo. Em seguida, você pode extrair esse arquivo para qualquer local que desejar. Isso preserva a estrutura do arquivo original.
Eu precisava adicionar arquivos de imagens de álbuns perdidos ao meu celular, sem ter que copiar a música novamente. Felizmente, a estrutura de diretórios era a mesma no meu computador e no meu celular!
Eu usei:
Isso criou um arquivo com todos os arquivos Folder.jpg nos subdiretórios apropriados.
Essa técnica também pode ser usada para copiar tipos de arquivo. Se todos os arquivos tivessem nomes diferentes, você poderia escolher extrair todos os arquivos para um único diretório. Parâmetros de linha de comando adicionais podem arquivar vários tipos de arquivo.
Mais informações neste link muito útil http://cects.com/using-the-winrar-command-line-tools-in-windows/
fonte
Para quem usa Altap Salamander (gerenciador de arquivos de 2 painéis): no pop-up Opções de Cópia, basta especificar os nomes dos arquivos ou máscaras. Fácil.
fonte
Eu estou bem com expressões regulares, preguiçosas e avessas a instalações, então criei um arquivo em lote que cria o diretório e copia com comandos do DOS vanilla. Parece trabalhoso, mas mais rápido para mim do que fazer robocópia.
(.*)
substitua a string"\1"
e clique em substituir tudo(.*)
substituir stringmd qqq\1\nxcopy \1 qqq\1\n
e clicar em substituir tudo\\([^\\^"]+)"\n
substituir\\"\n
A:\src
eB:\dest
). DESLIGUE as expressões regulares, pesquiseqqq"A:\src\
substituirB:\dest\
e clique em substituir tudo.md criará diretórios aninhados. copy provavelmente se comportaria de forma idêntica a xcopy neste exemplo. Você pode querer adicionar / Y ao xcopy para suprimir as confirmações de substituição. Você acaba com um arquivo em lote assim:
repetido para cada arquivo em sua lista original. Testado em Win7.
fonte
Para fazer isso com arrastar e soltar, use o winzip, há uma opção de preservação da estrutura dir. Basta criar um novo .zip no nível do diretório que será sua raiz e arrastar os arquivos para dentro.
fonte