如果 src 和 dest 位于不同的分区,则不要移动目录/文件

如果 src 和 dest 位于不同的分区,则不要移动目录/文件

为了在输入目录/文件名路径时出错时保护自己,我正在寻找一种方法来防止 mv 在源文件和目标文件存在于不同的分区时执行任何操作。

我在手册页中没有看到任何选项。谷歌似乎没有帮助。也许像

sourceDrive=something sourceFile
destinationDrive=something destinationFile

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

我只需要找到一种方法来获取目录/文件所在的分区

答案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然后stat 目标。如果复制失败您必须创建目标来测试它,然后删除该目标。

相关内容