Cuando uso
cp -R inputFolder outputFolder
el resultado depende del contexto :
- si
outputFolderno existe, se creará y se creará la ruta de la carpeta clonadaoutputFolder. - si
outputFolderexiste, entonces el clon creado seráoutputFolder/inputFolder
Esto es horrible , porque quiero crear un script de instalación, y si el usuario lo ejecuta dos veces por error, lo habrá outputFoldercreado la primera vez, luego, en la segunda ejecución, todo se creará nuevamente outputFolder/inputFolder.
- Siempre quiero el primer comportamiento: crear un clon al lado del original (como hermano).
- Quiero usar
cppara ser portátil (por ejemplo, MINGW no se harsyncenviado) - Lo comprobé
cp -R --parentspero esto recrea la ruta hasta el árbol de directorios (por lo que el clon no seráoutputFolderperosome/path/outputFolder) --remove-destinationo--updateen el caso 2 no cambia nada, aún las cosas se copian enoutputFolder/inputFolder
¿Hay alguna manera de hacer esto sin verificar primero la existencia de outputFolder(si la carpeta no existe, entonces ...) o usar rm -rf outputFolder?
¿Cuál es la forma acordada y portátil de UNIX de hacer eso?
rsync?
cp, canalizar entre dos tarcomandos es una buena forma confiable de copiar árboles.
rsyncenviado.
tar -C input -cf - . | tar -C output -xf -funciona. -Ccambia el directorio de trabajo, pero no es una opción estándar, por lo que si no es compatible, debe comenzar a ejecutar los dos tars en los directorios de trabajo correctos, por ejemplo, sin ( cd input && tar -cf - . ) | ( cd output && tar -xf - )embargo, si se trata de Windows, usaría la respuesta de Roaima.
mvmover una colección de archivos a una única normal?