我需要使用 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