Não mova um diretório / arquivo se src e dest estiverem em partições diferentes

2

Para proteger-me se eu cometer um erro ao digitar um caminho de diretório / nome de arquivo, estou procurando uma maneira de impedir que o mv faça qualquer coisa se os arquivos de origem e destino existirem em partições separadas.

Não vejo opções na página man. O Google não pareceu ajudar. Talvez algo como

sourceDrive=something sourceFile
destinationDrive=something destinationFile

if [ $sourceDrive == $destinationDrive ]
   mv sourceFile destinationFile
fi

Eu só preciso encontrar uma maneira de obter a partição em que o diretório / arquivo está

    
por quack quixote 13.02.2010 / 22:17

1 resposta

1

Você quase certamente está procurando escrever um script para fazer isso.

Para arquivos , você pode criar um link para eles e, se tiver êxito, desvincular o original. Isso não funcionará para diretórios (porque a maioria dos sistemas de arquivos proíbe diretórios hardlinking).

Script minimamente testado e trivial que pode fazer isso:

#/bin/sh
if ln "$1" "$2" ;
then
   unlink "$1"
fi

A alternativa é verificar o sistema de arquivos associado a cada caminho.

Aqui eu posso começar com algo como

#! /bin/sh
STAT=/usr/bin/stat
v1=$( $STAT -f "%d" "$1" )
v2=$( $STAT -f "%d" "$2" )
if [[ $v1 == $v2 ]]
then
    mv "$1" "$2"
fi

ATENÇÃO! Isso tem um erro se você especificar o diretório mais alto de um sistema de arquivos como um destino. Consertar o bug é sutil, mas pode ser assim: verifique se o destino já existe. Se não for touch . Então , informe o destino. Se a cópia falhar e você tiver que criar o alvo para testá-lo, remova o alvo.

    
por 13.02.2010 / 22:20