如何检测文件系统是否支持权限?

问题描述 投票:0回答:1

最近,当我的脚本通过 tar 将临时文件提取到用户选择的文件夹时,我遇到了一个问题。

问题是,如果该文件夹位于具有

exfat
文件系统的 USB 记忆棒上,则提取的文件会丢失
ext4
btrfs
文件系统随每个文件存储的权限信息。

为了解决这个问题,我创建了以下修复程序:

#!/usr/bin/env bash

FOLDER="/example"
FS=$(stat -f -c %T "$FOLDER")

if [[ "$FS" == "fat"* || "$FS" == "vfat"* || "$FS" == "exfat"* || "$FS" == "ntfs"* || "$FS" == "fuse"* || "$FS" == "msdos"* ]]; then
  echo "Unsupported filesystem!"
  exit
fi

虽然这有效,但它要求我保留哪些文件系统与

ext4
权限不兼容的列表,而且我确信我的列表还远未完成。因为存在数十种外来文件系统可能存在相同的问题。

那么有没有更好的方法来测试文件夹是否支持权限呢?如果没有,我应该添加哪些文件系统到这个列表中以使其更完整?

linux bash filesystems file-permissions ext4
1个回答
0
投票

要检测文件系统是否支持权限,您可以创建一个临时文件,然后尝试更改其权限。如果文件系统支持权限,则 chmod 命令将会成功。如果没有,命令将失败。

以下是如何在 shell 脚本中实现此功能:

tempfile=$(mktemp)
chmod 600 "$tempfile" 2>/dev/null
if [ $? -eq 0 ]; then
    echo "Filesystem supports permissions"
else
    echo "Filesystem does not support permissions"
fi
rm "$tempfile"

此脚本创建一个临时文件,尝试将其权限更改为 600(所有者有读写权限,其他任何人都没有权限),并检查 chmod 命令的退出状态。如果退出状态为0,则命令成功,这意味着文件系统支持权限。如果退出状态不为0,则命令失败,这意味着文件系统不支持权限。然后该脚本会删除临时文件。

我希望我已经帮助澄清了几点。

© www.soinside.com 2019 - 2024. All rights reserved.