Когда я использую
cp -R inputFolder outputFolder
результат зависит от контекста :
- если
outputFolder
он не существует, он будет создан и путь клонированной папки будетoutputFolder
. - если
outputFolder
существует, то созданный клон будетoutputFolder/inputFolder
Это ужасно , потому что я хочу создать какой-нибудь сценарий установки, и если пользователь запустит его дважды по ошибке, он создаст outputFolder
первый раз, а затем при втором запуске все вещи будут созданы снова outputFolder/inputFolder
.
- Я хочу всегда первое поведение: создать клона рядом с оригиналом (в качестве родного брата).
- Я хочу использовать,
cp
чтобы быть портативным (например, MINGW неrsync
поставляется) - Я проверил,
cp -R --parents
но это воссоздает путь до дерева каталогов (так что клон не будет,outputFolder
ноsome/path/outputFolder
) --remove-destination
или--update
в случае 2 ничего не изменить, все же вещи копируются вoutputFolder/inputFolder
Есть ли способ сделать это без предварительной проверки на наличие outputFolder
(если папка не существует, то ...) или с помощью rm -rf outputFolder
?
Каков согласованный, переносимый способ UNIX сделать это?
rsync
?
cp
, конвейерная передача между двумя tar
командами - хороший надежный способ копирования деревьев.
rsync
отправлен.
tar -C input -cf - . | tar -C output -xf -
работает. -C
меняет рабочий каталог, но это не стандартная опция, поэтому, если она не поддерживается, для начала вам нужно запустить два tars в правильных рабочих каталогах, например. ( cd input && tar -cf - . ) | ( cd output && tar -xf - )
Однако, если вы имеете дело с Windows, я бы просто использовал ответ roaima.
mv
перемещение коллекции файлов в один обычный?