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