如何使用 mv 在 unix 中移动文件夹,仅当目标位于同一驱动器上时

如何使用 mv 在 unix 中移动文件夹,仅当目标位于同一驱动器上时

我需要使用 unix mv 命令移动文件夹,但前提是目标位于同一驱动器或同一文件系统中。最好的方法是什么?

答案1

基于如何检查两个目录或文件是否属于同一文件系统https://unix.stackexchange.com/):

在 Linux 上的 shell 脚本中,可以使用统计

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

其他选项。也取自Stackchange 问题

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

相关内容