Не перемещайте каталог/файл, если src и dest находятся на различных разделах

Для защиты меня, если я делаю ошибку во вводе пути каталога/имени файла, я ищу способ препятствовать тому, чтобы mv делал что-либо, если источник и целевые файлы существуют на отдельных разделах.

Я не вижу опций в странице справочника. Google, казалось, не помог. Возможно, что-то как

sourceDrive=something sourceFile
destinationDrive=something destinationFile

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

Я просто должен найти способ получить раздел, каталог/файл идет

2
задан 14.02.2010, 00:28

1 ответ

Вы почти наверняка смотрите на запись сценария, чтобы сделать это.

Для файлов Вы могли hardlink их и если это было успешно, удалите связь с оригиналом. Это не будет работать на каталоги (потому что большинство файловых систем запрещает hardlinking каталоги).

Минимально протестированный, тривиальный сценарий, который мог бы сделать это:

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

Альтернатива должна проверить файловую систему, связанную с каждым путем.

Здесь я мог бы запустить с чего-то вроде

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

ПРЕДУПРЕЖДЕНИЕ! Что имеет ошибку, если Вы указываете каталог самого верхнего уровня файловой системы как цель. Исправление ошибки является тонким, но это могло бы пойти как это: проверьте, существует ли место назначения уже. Если нет touch это. Затем статистика место назначения. Если копия перестала работать, и необходимо было создать цель, чтобы протестировать ее, удалить цель.

1
ответ дан 12.12.2019, 00:30

Теги

Похожие вопросы