Como copio um diretório para ele?

3

Eu posso copiar um diretório assim:

~$ cp -r ./Desktop/ /tmp/

Da mesma forma, se eu quisesse copiar os arquivos de dentro de um diretório, eu poderia fazer isso:

~$ cp -r ./Desktop/. /tmp/

As coisas se tornam um pouco mais complicadas se eu quiser copiar o diretório de origem em um diretório de destino, que é um subdiretório da origem. isto é, copie um diretório para si mesmo. Por exemplo:

~$ cp -r ./Desktop/ ./Desktop/sub/

Ocorreria o seguinte erro: cp: não pode copiar um diretório, './Desktop/', para dentro dele, './Desktop/sub /'

Isso pode ser circunavegado, de alguma forma, usando extglob, da seguinte forma:

~$ cp -r ./Desktop/!(sub) ./Desktop/sub/

No entanto, este último comando depende do diretório sub já existente.

Como você pode copiar um diretório para si mesmo, de tal forma que o comando faça isso ao mesmo tempo?

    
por Andrew Hardiman 02.08.2017 / 18:44

2 respostas

7

Use rsync em vez de cp :

rsync -Rr ./Desktop/ ./Desktop/sub/

Vamos testar:

$ cd /tmp
$ mkdir -p Desktop/sub
$ touch Desktop/a-file
$ ls -F Desktop
a-file sub/
$ cp ./Desktop ./Desktop/sub
cp: cannot copy a directory, './Desktop', into itself, './Desktop/sub/Desktop'

No entanto, rsync funcionará bem:

$ rsync -Rr ./Desktop/ ./Desktop/sub/
$ ls -F Desktop/sub/
Desktop/
    
por Ravexina 02.08.2017 / 18:55
0

Você sempre pode usar o /tmp para uma transmissão. (Sem rsync

~$ ls
1  2  3  a  b  c  ddd  w  wow
~$ cp -r . /tmp/TEMP
~$ mv /tmp/TEMP copy_dir
~$ ls
1  2  3  a  b  c  copy_dir  ddd  w  wow
~$ ls copy_dir/
1  2  3  a  b  c  ddd  w  wow

Ou faça uma função:

function cpc() { cp -r . /tmp/cpc- && mv /tmp/cpc- .; }

Assim:

~$ function cpc() { cp -r . /tmp/cpc- && mv /tmp/cpc- .; }
~$ ls
1  2  3
~$ cpc hhh
~$ ls hhh
1  2  3
~$ ls
1  2  3  hhh
~$
    
por Mr.m 05.12.2017 / 07:48