如何在扩展到匹配文件之前访问文字通配符参数?

2024-01-17

背景:

我正在编写一个必须接收这些参数的 bash 脚本:

  1. 文件名(包含一组规则的文件)
  2. 文件名列表(要处理的文件,可以使用通配符)
  3. 目标文件夹(将存储文件的处理版本)

理论上有 3 个参数,但实际上第二个参数会扩展,因此如果通配符匹配多个文件,参数的实际数量会有所不同:

当我打电话时

./myscript  file.conf *.data dest_foder

*.data扩展到与通配符匹配的多个文件,因此它相当于:

myscript file.conf this.data that.data so.data dest_foder

在处理之前,我需要验证最后一个参数是文件夹而不是文件。

问题

如果我省略目标文件夹,例如:

myscript file.conf *.data

验证?# -ge 3通过是因为通配符返回多个项目,并且如果恰好存在与通配符匹配的文件夹, like this_is_a_folder.data,那么展开式就是这样:

myscript file.conf this.data that.data so.data this_is_a_folder.data

该脚本将工作,但以非预期的方式...它将处理this.data, that.data and so.data并将文件的处理版本放入文件夹中this_is_a_folder.data.

Question

  • 我该如何避免这种情况?
  • 如何验证目标文件夹是否作为参数显式传递,而不是第二个参数中通配符扩展的乘积?

在将文字“*.data”参数扩展为匹配的文件名之前,我无法找到一种方法来读取它。

澄清:

我知道如何阅读最后一个论点。

  • 但我如何知道最后一个参数是否已明确传递,或者产品是否是通配符扩展?

您不能这样做,因为 shell 在脚本启动之前就扩展了命令行中的所有通配符。当你进入./myscript file.conf *.data dest_foder在 shell 中,这实际上只是一个简写./myscript file.conf this.data that.data so.data dest_foder,不是不同的命令。

如果需要将通配符作为实际参数传递到命令中,则需要引用或转义它。就像是./myscript file.conf '*.data' dest_foder or ./myscript file.conf \*.data dest_foder。或者,将最后一个参数设为强制,或将其变成选项 (-d dest_folder)所以预扩展的文件列表不是问题。

换句话说:如果您不必在 grep 模式中引用/转义通配符,那将会非常方便;但你必须这样做,因为没有办法grep命令以未展开的形式获取其参数。如果作者grep无法弄清楚如何使他们的命令更方便,你不可能做到这一点......

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

如何在扩展到匹配文件之前访问文字通配符参数? 的相关文章

  • 在 shell 脚本中连接命令字符串

    我正在维护一个现有的 shell 脚本 它将命令分配给 shell 脚本中的变量 例如 MY COMMAND bin command dosomething 然后接下来 它通过执行以下操作将 参数 传递给 MY COMMAND MY ARG
  • 如何替换“docker run”命令中的变量值

    我正在使用 bash 脚本并尝试分配指纹值 如下所示 export FINGERPRINT D0 19 C5 80 42 66 56 AC 6F docker run rm i v var run docker sock var run d
  • 设置 Pyenv 的路径

    我正在尝试在我的服务器中设置 Pyenv 的加载路径 bashrc file 我正在关注这个tutorial https realpython com intro to pyenv 它要求我们在哪里设置pyenv到加载路径 然而 在我的 b
  • 此 bash 命令在 Makefile 中未正确运行

    在 Makefile 里面我有这样的 release version poetry version cut f2 d echo release version 如果我运行 我的终端中的语句将毫无问题地运行 gt version poetry
  • main() 还可以接受其他参数吗?

    我最近在搜索 C 环境变量时发现了以下内容 int main int argc char argv char envp 我四处搜寻 找不到关于我的问题的任何结论 所有可用的论据是什么main 可以接受吗 C99 和 C11 标准草案允许实现
  • 渲染:带参数的动作

    我有一个有 2 种方法的类 第一个方法由视图使用一些 GET 参数 params page 调用 我想保存这些参数并通过渲染操作将它们发送到我的第二个方法 class exemple def first sql save of params
  • 根据传递的参数覆盖 Javascript 函数

    是否可以根据传递给函数的参数数量来重写函数 例如 function abc name document write My name is name function abc name friend document write My nam
  • 如何将 bash 脚本的整个输出保存到文件

    我正在尝试将 bash 脚本的整个输出保存到文件中 我目前在代码开头有一个参数 ip 地址 如下所示 bin bash USAGE Usage 0
  • 如何将参数传递给java bash脚本? [复制]

    这个问题在这里已经有答案了 我有一个简单的 bash 脚本来运行我的 java 程序 就这个 run sh bin sh java jar target my jar arch jar 我想将参数传递给这个脚本 该脚本必须将它们传递给jav
  • 为什么我不能将 sed 的输出重定向到文件

    我正在尝试运行以下命令 someprogram tee dev tty sed s 2 gt output file 但当我去查看时 该文件始终是空白的 如果我删除 gt output file从命令末尾 我可以看到 sed 的输出 没有任
  • 在bash中,是否有相当于“错误消息”的东西

    在 perl 中 您可以使用错误消息退出die some msg bash 中是否有等效的单个命令 现在 我正在使用命令来实现这一点 echo some msg exit 1 你可以很容易地自己推出 die echo 1 gt 2 exit
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • JasperReports Server 参数依赖关系

    我有一份有两个输入参数的报告 两者都有一个保管箱 我可以在其中选择值 假设参数A 和参数B 是否可以使 ParameterB 依赖于 ParameterA 例如 如果我在 ParameterS 中选择汽车品牌 Honda 我应该只能看到 H
  • 语法错误:for 循环变量不正确

    我正在尝试编写一个可以在后台调高收音机音量的脚本 bin sh for i 80 i lt 101 i do amixer cset numid 1 i sleep 60 done 但我有问题 alarmclock vol sh 3 ala
  • 如何在递归调用函数时阻止 bash 创建子 shell

    这是一个计算阶乘的简单 shell 函数 bin bash function factorial if 1 lt 2 then echo 1 else echo 1 factorial 1 1 fi factorial 1 但我发现这个脚本
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • grep 两个分隔符之间的子字符串

    我有很多bash使用的脚本perl内的表达式grep为了提取两个分隔符之间的子字符串 例子 echo BeginMiddleEnd grep oP lt Begin End 问题是 当我将这些脚本移植到运行的平台时busybox 融合的 g
  • Pure Bash 替换捕获组

    我有这个示例字符串 test string 13A6 该字符 数字可以是从 0 到 9 以及从 A 到 F 我想要这个输出 1 3 A 6 我有这个工作 result echo test string sed s g 我想在没有 sed 的
  • C 中函数参数中的固定数组或指针之间的区别?

    之间有区别吗 void draw line float p0 2 float p1 2 float color 4 和这个 void draw line float p0 float p1 float color in C 项目清单 C 和
  • 如何判断 Bash 中是否存在文件?

    这会检查文件是否存在 bin bash FILE 1 if f FILE then echo File FILE exists else echo File FILE does not exist fi 我如何只检查文件是否存在not ex

随机推荐

  • 消除平均数值的子查询

    Quest 查询选择以 Vancouver 开头且距离以 Vancouver 开头的所有位置的中心 5 分钟范围内的所有点 例如 Vancouver South Fraser Vancouver Fairview 和Vancouver Ba
  • 跨文件的 SQLAlchemy 类

    我试图弄清楚如何将 SQLAlchemy 类分布在多个文件中 但我一生都无法弄清楚如何做到这一点 我对 SQLAlchemy 还很陌生 所以如果这个问题很微不足道 请原谅我 考虑这 3 个类每个人都有自己的文件 A py from sqla
  • 将 Eclipse 替换为 Sublime Text 2/3 for java

    有没有人设法为他们的基于 java 的应用程序构建一种使用 Sublime Text 2 或 3 而不是 eclipse 的方法 我们在 eclipse mac 中提供了 java 并支持 Maven 和 git 我们本身并不在 Eclip
  • 如何理解重定位部分“.rela.plt”的字段

    我试图了解 Linux 上共享库的动态链接 给出重定位部分 rela plt 的以下转储 Offset Info Type Sym Value Sym Name Addend 000000373f68 0f8300000007 R X86
  • Silverlight AutoCompleteBox 大写输入

    我需要在 Silverlight 4 应用程序的 AutoCompleteBox 中强制输入大写字母 在 TextBox 中 可以通过替换 KeyDown 事件上的 Text 属性来完成 例如 control Text enteredCha
  • Internet Explorer 中的 JavaScript 故障排除工具

    我大量使用 Firebug 和 Mozilla JS 控制台 但时不时地会遇到仅 IE 的 JavaScript bug 这真的很难定位 例如 第 724 行错误 当源 HTML 只有 200 行时 我想要一个轻量级的 JS 工具 a la
  • 火花提交:--jars 不起作用

    我正在为 Spark Streaming 作业构建指标系统 在系统中 指标是在每个执行器中收集的 因此需要在每个执行器中初始化指标源 用于收集指标的类 指标源被打包在一个jar中 提交作业时 使用参数 jars 将jar从本地发送到每个执行
  • 使用Java读取名称中带有空格的文件?

    文件的原始名称是1 00100 0042 jpg 我有个问题 java net URISyntaxException Illegal character in path at index 49 file opt storage user d
  • F# - 了解使用泛型的类型

    我将在 10 天后参加 F 考试 由于我目前正在做旧的考试集 因此我在理解泛型尤其是具有两个多态参数的类型时遇到了问题 这些问题应该很容易解决 但它在语法上是如何运作的 我不确定 旧考试题如下 以下类型Sum lt a b gt 包含两种不
  • 如何评估 JSF 复合组件中的 MethodExpressions

    我不确定处理复合组件中的方法表达式的 正确 方法 我的组合使用带有操作方法的支持类 这些执行一些默认操作或委托给复合用户作为属性传递的操作方法 使用页面中
  • Flutter mlkit 阿拉伯语文本检测器

    嗨 我正在使用 fluttermlkit https pub dev packages mlkit with firebase https firebase google com docs ml kit 从图像中提取文本 如果语言是英语 一
  • 当我单击下载链接时,如何强制 chrome 显示“另存为”对话框? [复制]

    这个问题在这里已经有答案了 我在 chrome 中使用 WebKitBlobBuilder 在用户端生成文本文件 现在 我需要显示一个另存为对话框 让用户决定放置新生成的文件的文件夹 在 Chrome 中 另存为对话框 无需浏览器配置 如何
  • 如何在小块中禁用 Haskell 警告?

    我想仅禁用某些代码块的警告 我搜索了 Google 但只找到文件范围或全局范围禁用方法 使用 cabal 文件或 pragma OPTIONS GHC 我可以禁用特定功能的警告吗 不可以 目前在 GHC 9 2 1 中还不能 The OPT
  • 如何指定div的高度?

    我想为前两个 div 指定固定高度 并为接下来的两个 div 指定百分比值 最后一个 div 应该占据前一个 div 留下的所有空间 到浏览器窗口的底部 我如何在CSS中实现这个 这是我的 css html
  • 内联块元素和垂直对齐推理

    我使用 display inline block 有 2 个彼此相邻的 div 框 如果没有内容 两个内联块 div 都会与顶部垂直对齐 如果两者都有内容 它们也会垂直对齐到顶部 如果其中只有一个具有文本内容 则具有文本内容的 div 框将
  • SQLite - 存储多个值

    如何在 SQLite 数据库中存储和检索同一列的同一行的多个值 即我有一个产品列 另一列是商店 我在其中放入所有可以获得该产品的商店 Product iLamp Stores River s McWay Lonnie s 我怎样才能实现这个
  • Xcode 4.1 代码签名问题

    我已经阅读了很多线程 但在这里找不到类似我的问题的内容 我认为这是一个简单的修复 但我似乎找不到答案 我正在使用 Xcode 4 1 Gold Master 基本上 当我归档我的 Mac 应用程序时 它会经历所有正常流程 构建成功 但是 当
  • 有没有办法像 C# 中的 @"string" 一样转义 powershell 中的字符串

    有没有办法在 powershell 中转义完整的字符串 就像 string 在 C 中的工作方式一样 我正在编写一个脚本 其中有几个如下所示的字符串 D A CCLCSWRPWPDTLOCRRC SY A CCDCLCSWRPWPDTLOC
  • Laravel / Eloquent hasMany 关系 sum()

    我不知道如何立即加载关系列的总和 数据库 简化 如下 TABLES PRODUCT PRODUCT VARIATIONS ID ID NAME NAME AVAILABLE STOCK 我的关系设置如下 public function va
  • 如何在扩展到匹配文件之前访问文字通配符参数?

    背景 我正在编写一个必须接收这些参数的 bash 脚本 文件名 包含一组规则的文件 文件名列表 要处理的文件 可以使用通配符 目标文件夹 将存储文件的处理版本 理论上有 3 个参数 但实际上第二个参数会扩展 因此如果通配符匹配多个文件 参数