Como mover a pasta no unix usando o mv, somente quando o destino estiver na mesma unidade


10

Preciso mover uma pasta usando o comando unix mv, mas apenas se o destino estiver na mesma unidade ou no mesmo sistema de arquivos. Qual seria a melhor abordagem?

linux  bash  shell  unix  mv 

1
dirigir aqui você quer dizer "dispositivo"? por exemplo, mesmo disco rígido?
21713 Kent

mesmo dispositivo, sim

Respostas:


9

Baseado em Como verificar se dois diretórios ou arquivos pertencem ao mesmo sistema de arquivos ( /unix// ):

Em um script de shell no Linux, isso pode ser feito com stat :

stat -c "%d" /path  # returns the decimal device number

Então você pode:

file1=$(stat -c "%d" /path/file1)
file2=$(stat -c "%d" /path/file2)

e então compare.

Você também pode escrever assim:

if [ $(stat -c "%d" /path/file1) -eq $(stat -c "%d" /path/file1) ]
then
    # mv sentence
fi

Outra opção. Também retirado da pergunta Stackexchange :

if [[ $(df -P /path/file1 | tail -1) = $(df -P /path/file2 | tail -1) ]]
then
    # echo "same filesystem"
    # mv sentence
fi

Você acha que é compatível com as distribuições Linux?

Apenas para divulgar as melhores práticas, use em $(...)vez de `...`. O último é preterido em favor do primeiro.
precisa

Obrigado @ Shahbaz, apenas editei com sua recomendação!
Fedorqui 29/04

@ zapp eu não sei, deve testá-lo. Minha experiência com statme diz que às vezes é complicado, pelo menos com o SunOS. Mas sendo Linux, espero que seja compatível. Com o meu Ubuntu 12 está tudo bem.
Fedorqui 29/04

isso %dgera valores diferentes para diferentes diretórios (até a mesma partição) tente com o seu /e/tmp
Kent

2

Provavelmente, essa não é a solução mais limpa, mas você pode usar o fato de que não é possível criar links físicos entre as unidades.

ln /path1/file /path2/file 2> /dev/null
if [[ $? == 0 ]]
then
    rm /path1/file
fi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.