Quando uso
cp -R inputFolder outputFolder
il risultato dipende dal contesto :
- se
outputFolder
non esiste, verrà creato e sarà il percorso della cartella clonataoutputFolder
. - se
outputFolder
esiste, allora sarà il clone creatooutputFolder/inputFolder
Questo è orribile , perché voglio creare qualche script di installazione, e se l'utente esegue due volte per errore, avrà outputFolder
creato la prima volta, poi la seconda manche tutte le cose sarà creato ancora una volta outputFolder/inputFolder
.
- Voglio sempre il primo comportamento: creare un clone accanto all'originale (come un fratello).
- Voglio usare
cp
per essere portatile (es. MINGW non è statorsync
spedito) - Ho controllato
cp -R --parents
ma questo ricrea il percorso fino all'albero della directory (quindi il clone non saràoutputFolder
masome/path/outputFolder
) --remove-destination
o--update
nel caso in cui 2 non cambi nulla, vengono comunque copiate le coseoutputFolder/inputFolder
C'è un modo per farlo senza prima verificare l'esistenza del outputFolder
(se la cartella non esiste quindi ...) o usare rm -rf outputFolder
?
Qual è il modo UNIX concordato e portatile per farlo?
rsync
?
cp
, il piping tra due tar
comandi è un modo affidabile e affidabile per copiare gli alberi.
rsync
spedito.
tar -C input -cf - . | tar -C output -xf -
funziona. -C
cambia la directory di lavoro, ma non è un'opzione standard, quindi se non è supportato è necessario eseguire le due tar nelle directory di lavoro giuste per iniziare, ad es. ( cd input && tar -cf - . ) | ( cd output && tar -xf - )
Tuttavia, se si ha a che fare con Windows, utilizzarei solo la risposta di roaima.
mv
di spostare una raccolta di file in una singola normale?