为了在输入目录/文件名路径时出错时保护自己,我正在寻找一种方法来防止 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 目标。如果复制失败和您必须创建目标来测试它,然后删除该目标。