Когда я использую
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перемещение коллекции файлов в один обычный?