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.