Bash: diretório mv, um de cada vez

7

Estou tentando mover todos os subdiretórios de uma pasta para outro compartilhamento no mesmo servidor. Se eu fizer um mv *, ficarei sem espaço, uma vez que as pastas não serão removidas até que todas as pastas sejam transferidas. Então, eu gostaria de criar um script curto que passe por cada um deles. Alguém tem um exemplo que eu possa olhar? Eu pesquisei por aí mas não consigo encontrar exatamente o que estou procurando.

    
por NinjaCat 17.04.2014 / 15:36

5 respostas

20

Você pode usar rsync(1) :

rsync --remove-source-files /path/to/source /path/to/destination

Isso removerá os arquivos transferidos com sucesso do caminho original.

    
por 17.04.2014 / 15:49
10

Você quer for .

Um exemplo (isso apenas mostrará o que será feito):

for item in *; do
    echo mv "$item" /destination/directory
done

Quando estiver satisfeito, remova echo para fazer isso de verdade.

    
por 17.04.2014 / 15:38
4

Usar o comando mv para mover arquivos de um volume para outro é uma operação de cópia. Mas como você ficaria sem espaço no volume de origem? Você ficaria sem espaço apenas no volume destino se esse volume for menor que o tamanho total dos arquivos que você está movendo. Mas de qualquer forma, você está apenas desalocando espaço no volume de origem, não alocando mais espaço nele.

Se você usa mv para "mover" arquivos de um diretório para outro no mesmo volume, isso é apenas uma operação de renomeação. Você não está copiando dados, apenas ajustando ponteiros de arquivos para apresentar uma hierarquia de diretórios diferente. Você não ficará sem espaço porque os dados do arquivo ficam exatamente onde estava.

De qualquer forma, não tenho certeza se vejo o problema. :-) Você realmente tentou isso e ficou sem espaço, ou está apenas planejando com antecedência?

    
por 18.04.2014 / 10:06
2

ls -1 | xargs -n1 -i echo mv '{}' destination

Basta remover o eco quando estiver feliz.

    
por 17.04.2014 / 16:44
1

Apenas para referência, acredito que o comando mv não faça uma cópia e depois exclua a operação, ou seja, tendo

mv /home/foo /home/bar

existe simultaneamente por um curto período. Opera mais como renomear. É essencial alterar a contabilidade do sistema de arquivos para que o que aponta para /home/foo agora aponte para /home/bar sem realmente mover fisicamente os dados no disco de um lugar para outro ou copiando e excluindo o local anterior.

    
por 17.04.2014 / 19:50