Acabei de criar um pequeno script, vamos chamá-lo de mv_safe.sh
. Uso: mv_safe SOURCE_FILE TARGET_DIRECTORY
if test ! -e "$2/$1"
then
mv -- "$1" "$2"
else
tries=1
while test -e "$2/$1.$tries"
do
tries=$((tries+1))
done
mv -T -- "$1" "$2/$1.$tries"
fi
Atenção: isso não é atômico. Se você executar várias cópias desse script em paralelo e acontecer de elas segmentarem o mesmo arquivo, elas poderão sobrescrever os arquivos uns dos outros.
Exemplo: você tem feefoo/foo.bar
e foo.bar
no seu / tmp:
$ ./mv_safe.sh foo.bar feefoo
Então, queremos mover "com segurança" foo.bar
para feefoo
, onde o nome " foo.bar
" já está sendo usado.
Vamos ver o que isso dá:
$ ls feefoo
foo.bar foo.bar.1
Um nome usual mv
if $1
ainda não é usado em $2
Espero que ajude:)