10

Мне нужно переместить папку с помощью команды unix mv, но только если цель находится на том же диске или в той же файловой системе. Какой будет лучший подход?

2 ответа2

9

На основе Как проверить, принадлежат ли два каталога или файла к одной файловой системе (https://unix.stackexchange.com/):

В сценарии оболочки в Linux это можно сделать с помощью stat:

stat -c "%d" /path  # returns the decimal device number

Так что вы можете:

file1=$(stat -c "%d" /path/file1)
file2=$(stat -c "%d" /path/file2)

а потом сравни.

Вы также можете написать так:

if [ $(stat -c "%d" /path/file1) -eq $(stat -c "%d" /path/file1) ]
then
    # mv sentence
fi

Другой вариант. Также взято из вопроса Stackexchange:

if [[ $(df -P /path/file1 | tail -1) = $(df -P /path/file2 | tail -1) ]]
then
    # echo "same filesystem"
    # mv sentence
fi
2

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

ln /path1/file /path2/file 2> /dev/null
if [[ $? == 0 ]]
then
    rm /path1/file
fi

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