mv: Diretório não vazio

115

Eu quero mover o conteúdo de um diretório dentro de outro diretório com as mesmas pastas.

Veja um exemplo:

Eu tenho ./backup os diretórios base e test . Agora quero mover esses diretórios em ./backupArchives .

Eu uso isso:

mv ./backup/* ./backupArchives

mas recebi o erro

mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty

Eu tentei usar --force , mas sem sorte. Existe uma maneira de movê-lo quando as pastas já existe?

Nota: Eu só quero mesclar o conteúdo, não há sobrescrever.

    
por UdK 19.03.2013 / 05:11

5 respostas

151

Embora a página man não o documente, mv se recusará a renomear um diretório para outro diretório se o diretório de destino contiver arquivos. Isso é uma coisa boa no seu caso, porque você acaba por querer mesclar o conteúdo da fonte no destino, o que mv não fará.

Use rsync -a backup/ backupArchives/ . Depois disso rm -rf backup/* .

Em vez de usar rsync , você também pode fazer o clássico

(cd backup && tar c .) | (cd backupArchives && tar xf -)

que te dá mais pontos nerd.

    
por zwets 19.03.2013 / 08:51
22

Rápido e sujo, se você sabe o que está fazendo:

cp -r ./backup/* ./backupArchives && rm -R ./backup/*
    
por patrickvacek 10.10.2013 / 18:07
3

Após o diretório em movimento, você precisa de * (representa qualquer texto ou número). Por exemplo:

mv /var/www/* /recovery/wwwrecovery/

é tudo, se você mover arquivos, do que você move como:

mv /var/www/index.php /recovery/index.php

Outra maneira é empacotar o conteúdo da pasta usando tar:

tar -cvzpf backup.tar.gz /var/www 

Em seguida, mova-o para outro arquivo. Também recomendo este passo porque o tar o comprime e o torna menor em tamanho.

Para extrair os arquivos para outra pasta use

tar -xvzpf /var/www/

Se você precisar copiar para um local que não é seu, prefira seu comando com o comando sudo depois da opção que você decidir usar.

sudo tar -cvzpf backup.tar.gz /var/www/
    
por Dimitris Theodoridis 19.03.2013 / 05:27
2

Com certeza rsync funciona, mas isso pode funcionar também para máquinas que não suportam rsync (por exemplo, no cpanel, que o rsync não é instalado por padrão).

Que tal usar:

cd /path/to/backup/ && cp -R --parents ./* ../backupArchives

Em seguida, remova o diretório backup , se necessário

Nota 1: Você precisa cd para o diretório backup antes de executar o cp -R --parents ...

Nota 2: Verifique novamente o diretório backupArchives se você obteve os novos arquivos do backup.

    
por Atillo Regner Rex 03.03.2017 / 08:45
1

Antes de fazer a pergunta, vamos considerar um caso simplificado.

Suponha que em / home / admin tenhamos duas pastas foo e bar que têm a mesma estrutura de subdiretórios, mas cada uma contém arquivos diferentes. Agora queremos mesclá-los em um. Quando fazemos coisas como mv foo/* bar , ocorre o erro mv: directory not empty .

Minha solução é abandonar as ferramentas de linha de comando e alternar para um gerenciador de arquivos GUI, por exemplo, dolphin. Quando você renomeia foo para bar no dolphin, ele lhe dá a opção de escrever na pasta de destino e pergunta se deseja sobrescrever os arquivos existentes de forma interativa. Isso evita copiar e excluir, o que, na verdade, economiza seu tempo sem uma única linha de código.

PS: Eu não testei todos os gerenciadores de arquivos por aí. Mas a maioria deles deve ter esse recurso.

    
por navigaid 12.10.2016 / 11:22

Tags