Kiedy używam
cp -R inputFolder outputFolder
wynik zależy od kontekstu :
- jeśli
outputFolder
nie istnieje, zostanie utworzony, a ścieżka sklonowanego folderu będzieoutputFolder
. - jeśli
outputFolder
istnieje, utworzony zostanie klonoutputFolder/inputFolder
To okropne , ponieważ chcę utworzyć skrypt instalacyjny, a jeśli użytkownik uruchomi go dwa razy przez pomyłkę, utworzy go outputFolder
za pierwszym razem, a następnie przy drugim uruchomieniu wszystkie elementy zostaną utworzone ponownie outputFolder/inputFolder
.
- Chcę zawsze pierwszego zachowania: utwórz klon obok oryginału (jako rodzeństwo).
- Chcę
cp
być przenośny (np. MINGW nie zostałrsync
wysłany) - Sprawdziłem,
cp -R --parents
ale to odtwarza ścieżkę w górę drzewa katalogów (więc klon nie będzie,outputFolder
alesome/path/outputFolder
) --remove-destination
lub--update
w przypadku, gdy 2 nic nie zmieni, nadal rzeczy są kopiowaneoutputFolder/inputFolder
Czy istnieje sposób, aby to zrobić bez uprzedniego sprawdzenia istnienia outputFolder
(jeśli folder nie istnieje, to ...) lub użycia rm -rf outputFolder
?
Jaki jest uzgodniony, przenośny sposób UNIX?
rsync
?
cp
, przesyłanie potokowe między dwoma tar
poleceniami to niezawodny niezawodny sposób na kopiowanie drzew.
rsync
wysłany.
tar -C input -cf - . | tar -C output -xf -
działa. -C
zmienia katalog roboczy, ale nie jest to standardowa opcja, więc jeśli nie jest obsługiwany, musisz uruchomić dwie tabele w odpowiednich katalogach roboczych na początek, np. ( cd input && tar -cf - . ) | ( cd output && tar -xf - )
Jeśli jednak masz do czynienia z Windows, użyłbym tylko odpowiedzi roaima.
mv
przenoszeniu kolekcji plików do jednego zwykłego pliku?