Quando eu uso
cp -R inputFolder outputFolder
o resultado depende do contexto :
- se
outputFoldernão existir, ele será criado e o caminho da pasta clonada seráoutputFolder. - Se
outputFolderexistir, o clone criado seráoutputFolder/inputFolder
Isso é horrível , porque eu quero criar algum script de instalação e, se o usuário outputFolderexecutá- 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
cppara ser portátil (por exemplo, o MINGW não foirsyncenviado) - Eu verifiquei,
cp -R --parentsmas isso recria o caminho até a árvore de diretórios (para que o clone não sejaoutputFoldermassome/path/outputFolder) --remove-destinationou--updateno 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 tarcomandos é uma boa maneira confiável de copiar árvores.
rsyncenviado.
tar -C input -cf - . | tar -C output -xf -funciona. -Cmuda 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.
mvuma coleção de arquivos seja movida para uma única regular?