检查两个文件是否在bash中的同一卷上

时间:2015-04-28 16:36:31

标签: macos bash file shell

有没有办法在Mac OS X上的bash中检查两个文件是否在同一个卷上? 或者,等效地检查给定文件是否在启动卷上?

我已尝试使用ln并检查其是否失败,但有时lncross-device link错误以外的其他原因而失败。

我还尝试使用打印文件路径的函数,然后检查该路径是否包含/Volumes/作为前缀,但并非所有远程卷都挂载到/Volumes/

还有其他办法吗?

2 个答案:

答案 0 :(得分:7)

您问的是两个文件是否在同一个文件系统上。检查此问题的规范方法是在两个文件上调用$(document).ready(function(){ $('button').click(function(){ $(":checked",".formerasemessage").each(function () { var par_div = $(this).closest(".demo"); //finding the closest div var form = $(this).closest('form'); form.validate({submitHandler: function () { $.post('remove.php', form.serialize(), function (data) { form.hide("slow"); par_div.hide('slow'); //hide the div }); } }).submit(); }); }); });系统调用,并检查它们是否具有相同的stat()值,其中st_dev标识文件所在的设备。

您可以在bash中使用st_dev命令来执行此测试:

stat

因此,要检查两个文件是否在同一个文件系统上:

device=$(stat -f '%d' /path/to/file)

以上在OS X下工作;可以在Linux上执行相同的检查,但dev1=$(stat -f '%d' /path/to/file1) dev2=$(stat -f '%d' /path/to/file2) if [ "$dev1" = "$dev2" ]; then echo "file1 and file2 are on the same filesystem" fi 命令需要stat-c而不是--format

答案 1 :(得分:1)

使用df

f1="$(df -P /path/to/file1.txt | awk 'NR!=1 {print $1}')"
f2="$(df -P /path/to/file2.txt | awk 'NR!=1 {print $1}')"

if [[ "$f1" = "$f2" ]]; then
  echo "same filesystem"
else
  echo "different filesystem"
fi