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

394
quack quixote

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

Я не вижу вариантов на странице руководства. Похоже, Google не помог. Может быть что-то вроде

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

Мне просто нужно найти способ получить раздел, в котором находится каталог / файл

2

1 ответ на вопрос

1
dmckee

Вы почти наверняка ищете сценарий для этого.

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

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

#/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это. Затем укажите пункт назначения. Если копия не удалась, и вам нужно было создать цель, чтобы протестировать ее, удалите цель.

Второй вариант выглядит так, как будто это должно сработать. По крайней мере для stat версии 7.4 используйте флаг "-c" для формата "% d". Благодарю за помощь. 14 лет назад 0

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