Cuando uso
cp -R inputFolder outputFolder
el resultado depende del contexto :
- si
outputFolder
no existe, se creará y se creará la ruta de la carpeta clonadaoutputFolder
. - si
outputFolder
existe, 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á outputFolder
creado 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
cp
para ser portátil (por ejemplo, MINGW no se harsync
enviado) - Lo comprobé
cp -R --parents
pero esto recrea la ruta hasta el árbol de directorios (por lo que el clon no seráoutputFolder
perosome/path/outputFolder
) --remove-destination
o--update
en 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 tar
comandos es una buena forma confiable de copiar árboles.
rsync
enviado.
tar -C input -cf - . | tar -C output -xf -
funciona. -C
cambia 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.
mv
mover una colección de archivos a una única normal?