如何在 Bash shell 脚本中检查目录是否存在?

2024-04-18

什么命令检查 Bash shell 脚本中的目录是否存在?


检查目录是否存在:

if [ -d "$DIRECTORY" ]; then
  echo "$DIRECTORY does exist."
fi

检查目录是否不存在:

if [ ! -d "$DIRECTORY" ]; then
  echo "$DIRECTORY does not exist."
fi

然而,作为乔恩·埃里克森 https://stackoverflow.com/users/1438/jon-ericson指出,如果您没有考虑到目录的符号链接也将通过此检查,则后续命令可能无法按预期工作。 例如。运行这个:

ln -s "$ACTUAL_DIR" "$SYMLINK"
if [ -d "$SYMLINK" ]; then 
  rmdir "$SYMLINK" 
fi

会产生错误信息:

rmdir: failed to remove `symlink': Not a directory

因此,如果后续命令需要目录,则可能必须以不同方式对待符号链接:

if [ -d "$LINK_OR_DIR" ]; then 
  if [ -L "$LINK_OR_DIR" ]; then
    # It is a symlink!
    # Symbolic link specific commands go here.
    rm "$LINK_OR_DIR"
  else
    # It's a directory!
    # Directory command goes here.
    rmdir "$LINK_OR_DIR"
  fi
fi

请特别注意用于包裹变量的双引号。 8jean 解释了其中的原因在另一个答案中 https://stackoverflow.com/a/67458/102401.

如果变量包含空格或其他异常字符,则可能会导致脚本失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Bash shell 脚本中检查目录是否存在? 的相关文章

  • 如何从 POSIXct 对象获取原点

    我有一个像这样的函数 foo function time in code here that changes POSIXct to numeric time out as POSIXct time in origin 1970 01 01
  • 如何使用jq提取json值子字符串

    我有这个 json temperature 21 humidity 12 3 message Today ID 342 is running 我想使用jq来获取这个json temp 21 hum 12 3 id 342 正如你所看到的 我
  • Shell 脚本 - 迭代空格分隔的单词/字符(在 zsh 中)

    我在弄清楚如何在 shell 脚本中迭代空格分隔的单词 字符时遇到一些麻烦 例如 我想迭代一个包含字母表中由空格分隔的字符的变量 注意 即使字母表变量包含空格分隔的字符串而不是字符 结果也应该是相同的 即 aa bb cc 而不是 a b
  • 如何为函数启用 bash 自动完成功能?

    我已经阅读了关于 bash 自动完成的教程bash补全简介 http www debian administration org article 316 An introduction to bash completion part 1我正
  • 使用 nzsql 将数据导出到 CSV

    我想从 netezza 将数据导出为 CSV 数据由数百万行记录组成 数据应位于引号内 并应使用 作为分隔符 例如 a b c 每当您想要从 Netezza 导出数据时 您都会需要使用其外部表功能 如果要导出到 Netezza 主机本地安装
  • 为 bash 脚本创建应答文件

    我想为别人的 bash 脚本创建一个应答文件 当您运行 bash 脚本时 第一次安装该软件时 系统会询问您 5 个问题 我用的是yes script命令并且有效 它会自动应答yes对所有问题 不过我还是想回答一下no对于最后一个问题 有办法
  • 获取后台进程的退出代码

    我有一个从我的主 bourne shell 脚本中调用的命令 CMD 该命令需要很长时间 我想修改脚本如下 作为后台进程并行运行命令 CMD CMD 在主脚本中 有一个循环每隔几秒监视生成的命令 该循环还向标准输出回显一些消息 指示脚本的进
  • 使用 bash 脚本迭代目录中的文件

    我想迭代给定目录中的文件 我尝试使用 for 循环进行相同的操作 但是我在这个循环中还有另一个循环 我需要读取多个文件 直到该循环中的条件为真才能一次上传 但是在内部循环中我是由于文件迭代器循环位于内部循环之外 因此只能访问一个文件 是否有
  • bash fork 炸弹的另一个版本是如何工作的?

    我大致了解如何这个通用版本 https stackoverflow com questions 991142 how does this bash fork bomb work bash fork 炸弹的工作原理 然而 我见过另一个版本 特
  • 为什么 ssh-agent 需要 root 访问权限?

    我刚刚安装了 Archbang 并尝试克隆我的 Git 项目 这需要 SSH 密钥 过去 我在 Ubuntu 和 RedHat 机器上遵循 Github 指南取得了成功 但由于某种原因 它在我的新 Arch 安装上不起作用 我已使用以下命令
  • Bash:更新文件中的变量

    我知道这是一个简单的答案 在找到答案之前我可能可以继续在谷歌上进行挖掘 但我的日程很紧 我希望能得到一个轻松的答复 我需要在安装时更新 ifcfg eth0 中的变量 换句话说 这就是需要发生的事情 以下变量需要更改 ONBOOT no B
  • 为什么 rm 不能按我的预期工作?

    我只想做一件简单的事 我在目录中得到了以下文件 AppInterface h baa PEMsg h PluginInterface h 然后我发出命令 ls grep v h rm rf 令我非常沮丧的是 baa不会被删除 但是这个 ls
  • 如何在 awk 或 sed 中编写查找所有函数(使用正则表达式)

    我有运行 python 的 bash 函数 它从标准输入返回所有找到的正则表达式 function find all python c import re import sys print n join re findall 1 sys s
  • 如何在 ubuntu 上的 emacs 中运行 shell 命令,同时避免 bash 作业控制错误?

    我在 ubuntu 中安装了 emacs 使用 sudo apt get install emacs 我遇到的问题是 当我尝试从 emacs 中运行 shell 命令时 例如M ls 输出之前是这样的 bash cannot set ter
  • 如何在c#中使用net user

    我正在尝试将 net user 与 c 一起使用 System Diagnostics ProcessStartInfo proccessStartInfo new System Diagnostics ProcessStartInfo n
  • 由于参数中有空格,Bash 脚本因未知选项而失败

    我正在尝试运行 aws create lambda 函数 事情的经过如下 eval aws lambda create function function name FUNCTION NAME runtime RUNTIME role RO
  • “排序文件名 | uniq”不适用于大文件

    我可以从小文本文件中删除重复条目 但不能从大文本文件中删除重复条目 我有一个 4MB 的文件 文件的开头如下所示 aa aah aahed aahed aahing aahing aahs aahs aal aalii aalii aali
  • POSIX:FreeBSD 与 Linux 中的管道系统调用

    在 Linux 2 6 35 22 generic 中 man pipe指出 pipeline 创建一个管道 一个可用于进程间通信的单向数据通道 在 FreeBSD 6 3 RELEASE p5 中 man pipe指出 pipeline
  • sed:更改 .yml 文件中环境属性的值

    我有一个 yml 文件 用于配置应用程序的环境属性 如下所示 env1 prop1 value1 prop2 value2 propn valuen env2 prop1 value1 prop2 value2 prop3 value3 p
  • 将尾部输出重定向到程序中

    我想使用 tail 作为标准输入向程序发送文本文件中的最新行 首先 我向程序回显一些每次都相同的输入 然后从输入文件发送尾部输入 该输入文件应首先通过 sed 处理 以下是我期望工作的命令行 但是当程序运行时 它只接收回显输入 而不接收尾部

随机推荐

  • 标准库中聚合可初始化性的类型特征?

    C 标准库有std is constructible
  • 在 Eclipse 之外使用 Maven

    我已经在 Eclipse 之外使用 Maven 但想使用 Eclipse 作为我的主编辑器 我不想使用已经嵌入 M2E 的 Maven 我想使用位于 usr bin mvn 的我的 在 Window gt Preferences 下 我尝试
  • 从 JDBC 结果集中获取 XML 的最佳方法

    我正在寻找从 JDBC 结果集中获取 XML 文档的最佳方法 XML 的结构并不是非常重要 但它应该相当快 为了清楚起见 我想要结果集中的数据和足够的元数据来识别数据 本质上是字段名称 我目前正在使用 MySQL DB2 SQL Serve
  • 礼品卡/借记卡激活

    一般问题 零售机构如何限制礼品卡或预付费电话 借记卡的激活 他们必须有一个系统 只能阻止您打电话激活未通过收银机扫描的卡 而且我认为零售 ERP 会计系统中必须内置一个标准解决方案 它可能涉及 Web 服务或 EDI 具体问题 我问这一切是
  • “破坏对象”的variable = null从何而来?

    在许多不同的公司中 我在使用各种 NET 版本编写的许多遗留系统上工作 不断发现以下模式的示例 public void FooBar object foo null object bar null try foo new object ba
  • “用户模板”未显示在“新项目”窗口中 - Xcode 4

    我最近从 SDL 网站下载了两个 SDL 包并将它们移动到相应的文件夹中 在 Library Application Support Developer Shared Xcode Project Templates 中 我创建了一个名为 A
  • 如何在 Python 中使数据正确符合幂律?

    我正在考虑Moby Dick 小说中独特单词的出现次数 http tuvalu santafe edu 7Eaaronc powerlaws data htm并使用powerlaw蟒蛇包 https pythonhosted org pow
  • 在 Interface Builder 中的 View Effects Inspector 中选择 CALayer 有何作用?

    在IB内部 在View Effects Inspector中 有一个设置核心动画层的选项 如果我设置了它会做什么 是否相当于setWantsLayer YES 如果是这样 那么按照苹果文档 https developer apple com
  • Flink 使用 Ceph 作为持久存储

    Flink 文档建议 Ceph 可以用作状态的持久存储 https ci apache org projects flink flink docs release 1 3 dev stream checkpointing html http
  • Django 中多个模型的单个自定义管理器

    我有几个模型通过外键关系相互连接 这种层次结构中的主要层次包含一个owner field 我想创建一个单一定制经理 for 所有这些模型根据调用它的模型更改返回的查询集 我知道经理可以访问self model获取它所附加的模型 Class
  • 编程测试 - Codility - Dominator [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是遇到了一个 codility 问题让我很困难 我仍在尝试找出如何满足空间和时间复杂性限制 问题如下 数组中的主导成员是指占据数组
  • 在 Protege 中使用 SPARQL 推断数据

    我正在尝试推断 RDF 数据 假设我有这些三元组 RDF Turtle 是我使用 Protege 创建的 prefix owl
  • 用于 Angular E2E 测试的 Protractor:管理测试数据的最佳方法是什么?

    我是新来的Angular and Protractor 我编写了几个量角器测试用例来自动注册 登录和其他一些页面 要执行测试用例 例如学生注册 我需要传递一些数据 例如姓名 出生日期 年龄 地址等 现在我在测试用例中对这些值进行硬编码 这不
  • 将开发分支与主分支合并

    我有两个分支master and development在 GitHub 存储库中 我正在开发分支中进行所有开发 如图所示 git branch development git add git commit m My initial com
  • 通过 .net 客户端通过 SSL 连接到 IBM MQ

    我正在尝试通过 NET 客户端连接到 MQ 服务器队列 我需要使用证书进行安全通信 这是我的代码 MQEnvironment SSLKeyRepository SYSTEM MQEnvironment ConnectionName conn
  • 在组上方展开 Android 的 ExpandableListView 子级

    ExpandableListView 实现的默认行为是在单击时展开组下方的子项 我想知道是否可以通过修改 ExpandableListView XML 属性或以某种方式以编程方式更改此行为 以便在组上方生成子级 单击时 我最终通过制作一个普
  • PyMol:选择我发现氢键的残基

    使用 PyMol 我可以使用 Action gt Find gt Polar Contacts 显示氢键 这会产生接触点 但我想通过仅显示具有这些接触点的残基而不显示其他内容来清楚地显示它们 目前 由于蛋白质的其余部分 视图非常不清楚 我想
  • Unordered_map 迭代器失效

    我有这个迭代器循环 typedef boost unordered map
  • UISearchbar 在 swift 4 中使用 UItextfield

    我正在研究 JSON 我的 Json 数据打印到表视图中 我想用搜索栏过滤该数据 所以我放置了 Textfield 以使用搜索栏 我使用这个网站的参考 http findnerd com list view How to create yo
  • 如何在 Bash shell 脚本中检查目录是否存在?

    什么命令检查 Bash shell 脚本中的目录是否存在 检查目录是否存在 if d DIRECTORY then echo DIRECTORY does exist fi 检查目录是否不存在 if d DIRECTORY then ech