Коли я користуюся
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
змінює робочий каталог, але це не стандартний варіант, тому, якщо він не підтримується, для початку потрібно запустити два тари у потрібних робочих каталогах, наприклад, ( cd input && tar -cf - . ) | ( cd output && tar -xf - )
якщо ви маєте справу з Windows, я просто використав би відповідь roaima.
mv
переміщенню колекції файлів у єдиний звичайний?