Configurei as seguintes pastas com arquivos de texto vazios:
1/a.txt
2/b.txt
Eu quero copiar apenas arquivos txt para outro diretório, mantendo sua estrutura de diretórios. Então tentei os seguintes comandos:
mkdir -p temp/s;
find ./ -name '*txt' -exec cp --parents '{}' ./temp/s \;
Agora vejo os seguintes arquivos do meu diretório atual:
1/a.txt
2/b.txt
temp/s/1/a.txt
temp/s/2/b.txt
temp/s/temp/s/2/b.txt
Eu não entendo porque a linha final temp/s/temp/s/2/b.txt
ocorreu. Alguém pode me explicar por que isso aconteceu e como posso corrigir meu comando de forma que temp
não esteja aninhado em outro temp
?
Este é o resultado final que eu esperava:
1/a.txt
2/b.txt
temp/s/1/a.txt
temp/s/2/b.txt
Você tem uma condição de corrida : uma vez que
temp/s
está nofind
caminho de pesquisa de ,find
está listando arquivos, enquanto oscp
s gerados estão adicionando novos arquivos.Você deve excluir o subdiretório durante a execução
find
:Observe que substituir
\;
por+
gerará muito menoscp
processos.