2

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

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

sourceDrive=something sourceFile
destinationDrive=something destinationFile

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

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

1 ответ1

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .