【问题标题】:Check if two directories are on the same filesystem in haskell检查两个目录是否在haskell中的同一个文件系统上
【发布时间】:2014-10-09 15:27:36
【问题描述】:

如果我有两个目录 AB 在 OS X 和 linux 上的 Haskell 中,我如何判断它们是否在同一个文件系统上(例如在同一个硬盘上)?

我检查了System.DirectorySystem.FilePath.Posix,它们似乎没有任何东西可以这样做。

【问题讨论】:

  • 这里的文件系统是什么意思? ext4zfs 之类的东西?
  • 我的意思是在两个不同的硬盘上。用例是,如果它们在不同的硬盘上,我想复制文件,否则我想移动一些文件

标签: linux macos haskell directory filesystems


【解决方案1】:

unix 包中的 getFileStatusdeviceID 函数应该可以帮助您。

【讨论】:

    【解决方案2】:

    一种方法是利用stat 实用程序并自己为其编写一个包装器。 stat 可以为您的文件提供设备编号。我在 Linux 中测试了以下代码,它适用于不同的磁盘(但我不确定 Mac OS):

    import Control.Applicative ((<$>))
    import System.Process
    
    statDeviceID :: FilePath -> IO String
    statDeviceID fp = readProcess "stat" ["--printf=%d", fp] ""
    -- for mac which has a different version of stat
    -- statDeviceID fp = readProcess "stat" ["-f", "%d", fp] ""
    
    checkSameDevice :: [FilePath] -> IO Bool
    checkSameDevice xs = (\x -> all (== head x) x) <$> (sequence $ map statDeviceID xs)
    
    paths = ["/mnt/Books", "/home/sibi"]
    
    main = checkSameDevice paths >>= print
    

    在 ghci 中:

    λ> main
    False   -- False since /mnt is a different hard disk
    

    【讨论】:

    • @Bilal 您可以通过该功能执行os checking 位,以备不时之需。
    猜你喜欢
    • 1970-01-01
    • 2013-01-08
    • 2016-09-18
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2011-07-04
    • 2018-08-30
    相关资源
    最近更新 更多