Quando eu uso
cp -R inputFolder outputFolder
o resultado depende do contexto :
- se
outputFolder
não existir, ele será criado e o caminho da pasta clonada seráoutputFolder
. - Se
outputFolder
existir, o clone criado seráoutputFolder/inputFolder
Isso é horrível , porque eu quero criar algum script de instalação e, se o usuário outputFolder
executá- lo duas vezes por engano, ele será criado pela primeira vez e, na segunda execução, todas as coisas serão criadas novamente outputFolder/inputFolder
.
- Eu quero sempre o primeiro comportamento: crie um clone ao lado do original (como um irmão).
- Eu quero usar
cp
para ser portátil (por exemplo, o MINGW não foirsync
enviado) - Eu verifiquei,
cp -R --parents
mas isso recria o caminho até a árvore de diretórios (para que o clone não sejaoutputFolder
massome/path/outputFolder
) --remove-destination
ou--update
no caso 2 não mudar nada, ainda assim as coisas são copiadas paraoutputFolder/inputFolder
Existe uma maneira de fazer isso sem primeiro verificar a existência do outputFolder
(se a pasta não existir, então ...) ou usar rm -rf outputFolder
?
Qual é a maneira portátil e acordada do UNIX de fazer isso?
rsync
?
cp
, a canalização entre dois tar
comandos é uma boa maneira confiável de copiar árvores.
rsync
enviado.
tar -C input -cf - . | tar -C output -xf -
funciona. -C
muda o diretório de trabalho, mas não é uma opção padrão; portanto, se não houver suporte, você precisará executar os dois alcances nos diretórios de trabalho certos, por exemplo, no ( cd input && tar -cf - . ) | ( cd output && tar -xf - )
entanto, se você estiver lidando com o Windows, usaria a resposta de roaima.
mv
uma coleção de arquivos seja movida para uma única regular?