【问题标题】:How can I test existence of a file with permissions 000?如何测试权限为 000 的文件是否存在?
【发布时间】:2016-10-04 10:19:27
【问题描述】:

出于某种我不知道的原因,我有一个权限设置为“000”的文件。

我想chmod u+r 它,因为我需要压缩它的整个文件夹。使用 000,zip 警告读取此文件时出现问题。

我想测试此文件是否存在,因为不是每次我都将它放入文件夹中。

但我验证使用以下结果是布尔错误

if [ -f $file_path ]; then 
...

-e 开关也返回 false。

如何通过 bash 脚本测试文件是否存在?

【问题讨论】:

  • 您的诊断错误。文件的权限仅在您尝试打开文件时才重要。不过,也许检查包含目录的权限。
  • 不过,缺少引用可能是个问题。试试[ -f "$file_path" ]

标签: linux bash file-permissions


【解决方案1】:

您可以使用以下语句在目录中搜索具有000 权限的文件:

find /tmp  -perm 000

/tmp 将是您的目录。

【讨论】:

    【解决方案2】:

    按照你的建议去做:

    $> touch none_foo
    $> chmod 000 none_foo
    $> if [ -f "none_foo" ]; then printf "yes\n"; else printf "no\n"; fi
    yes
    

    但是如果封闭文件夹有 000,那么你就注定 ;-)

    示例(从上述状态继续):

    $> mkdir disclosed
    $> mv none_foo disclosed/
    # still ok:
    $> if [ -f "disclosed/none_foo" ]; then printf "yes\n"; else printf "no\n"; fi
    yes
    # now a non-disclosure:
    $> chmod 000 disclosed
    $> if [ -f "disclosed/none_foo" ]; then printf "yes\n"; else printf "no\n"; fi
    no
    

    因此,对于文件路径中禁止“输入”的文件夹,您必须先进行更正。 并且在任何情况下(正如另一位评论者所建议的那样):在 shell 中使用文字和变量的引号 ...

    正如@JeremyJStarcher 在他的回答中发布的那样,您也可以使用:

    $> find ./ -perm 000
    .//disclosed
    find: .//disclosed: Permission denied
    

    但如您所见,文件夹陷阱将由具有足够权限的用户来缓解,以将 000 扩充为更易于访问的内容...

    【讨论】:

      猜你喜欢
      • 2011-08-15
      • 2023-03-17
      • 1970-01-01
      • 2021-01-17
      • 2011-02-16
      • 2018-12-25
      • 2010-09-14
      • 2010-11-27
      • 2012-06-20
      相关资源
      最近更新 更多