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