rm 无法从脚本中通过通配符删除文件,但可以在 shell 提示符下工作

2023-12-20

我在 Linux shell 脚本中遇到了一个非常愚蠢的问题。我想删除目录中扩展名为“.bz2”的所有文件。在我调用的脚本中

rm "$archivedir/*.bz2"

其中 $archivedir 是目录路径。应该很简单,不是吗?不知何故,它因以下错误而失败:

rm: cannot remove `/var/archives/monthly/April/*.bz2': No such file or directory

但有is该目录中的一个名为 test.bz2 的文件,如果我将脚本更改为

echo rm "$archivedir/*.bz2"

并将该行的输出复制/粘贴到终端窗口中,文件已成功删除。我究竟做错了什么?


TL;DR

仅引用变量,而不是带有通配符的整个预期路径

rm "$archivedir"/*.bz2

解释

  • 在 Unix 中,程序本身通常不解释通配符。 shell 解释不带引号的通配符,并将每个通配符参数替换为匹配文件名的列表。 如果 $archivedir 可能包含空格,那么rm $archivedir/*.bz2可能不会做你想做的事

  • 您可以通过引用通配符、在其前面使用双引号或单引号或反斜杠来禁用此过程。但是,这不是您想要的 - 您确实希望将通配符扩展到它匹配的文件列表。

  • 写字要小心rm $archivedir/*.bz2(不带引号)。发生分词(即将命令行分解为参数)after$archivedir 被替换。因此,如果 $archivedir 包含空格,那么您将得到您不想要的额外参数。说 archivedir 是/var/archives/monthly/April to June。然后你会得到相当于写作的东西rm /var/archives/monthly/April to June/*.bz2,它尝试删除文件“/var/archives/monthly/April”、“to”以及所有与“June/*.bz2”匹配的文件,这不是您想要的。

正确的解决方案是这样写:


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

rm 无法从脚本中通过通配符删除文件,但可以在 shell 提示符下工作 的相关文章

  • 使用sed插入文件内容

    我试图在给定模式之前插入文件内容 这是我的代码 sed i pattern i r scriptPath adapters default permissions xml manifestFile 它添加路径而不是文件的内容 有任何想法吗
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 疯狂的 crond 行为。不断使 bash 进程失效

    我有一个看起来像这样的 crontab SHELL bin bash PATH sbin bin usr sbin usr bin MAILTO root HOME 0 59 var www html private fivemin zda
  • Linux 堆栈大小

    我正在寻找 Linux 内核中堆栈的良好描述 但我发现找到任何有用的东西出奇地困难 我知道大多数系统的堆栈限制为 4k 而其他系统则限制为 8k 我假设每个内核线程 下半部分都有自己的堆栈 我还听说 如果中断发生 它会使用当前线程的堆栈 但
  • SSD 上的 MySQL 基准测试:工具和策略

    我目前正在将我的服务器从在硬盘驱动器上运行 MyISAM 切换到在 SSD 上运行 InnoDB 我有一个3 800 000 行 16GB 表作为基准表 我的服务器设置 Ubuntu 64 Nginx MySQL 5 5 我心里有两件事我想
  • PhoneGap - 构建 PhoneGap Android 应用程序在 Linux 上出现编译错误

    我在我的 linux ubuntu 12 04 机器上构建phonegap android 应用程序时遇到错误 我已经安装了nodejs 将JAVA HOME ANT HOME ANDROID HOME vars和 JAVA HOME bi
  • Linux 和 Windows 上的相同计算 --> 结果不同

    我编写了以下算法来将十进制值转换为二进制 十六进制等 string toFormatFromDecimal long long t Format format int digitCount ceil log t log int format
  • Cakephp cron 作业调用控制器的操作

    几个月前我开始使用 CakePHP 1 2 为公司的应用程序添加一些小功能 但我对它不太熟悉 我们先在开发服务器上进行本地测试 然后再合并到生产服务器 我希望每小时调用一个控制器操作 通过我的研究 我认为这是最好的方法 即 cron 作业
  • 如何可视化包含/指向彼此的 C 结构图?

    我正在使用Ubuntu 10 04 正在研究内核对象的编程 我遇到了一些相当复杂的结构 我很难阅读 所以我想我应该尝试找到一些可以帮助我可视化它们的工具 到目前为止我唯一能找到的是VCG http rw4 cs uni sb de sand
  • For 循环 Bash 中的大数序列[重复]

    这个问题在这里已经有答案了 在 Bash 脚本中 我使用一个简单的 for 循环 如下所示 for i in seq 1 1 500 do echo i done 这个 for 循环工作得很好 但是 当我想使用较大数字的序列 例如 10 8
  • 如何从 Windows 反编译 Linux 二进制文件?

    如何从 Windows 反编译 Linux 二进制文件 so 谢谢 你可以试试回旋镖 http boomerang sourceforge net 您需要首先从源代码构建它 因为提供的二进制文件不涵盖这种情况 如果您绝对拒绝编译任何内容 请
  • 命令行参数出现空格的问题

    我有一个 Java 程序 我正在 Linux 环境中通过 bash 脚本执行该程序 这是我的简单 bash 脚本 它接受一个字符串 bin bash java cp com QuoteTester 1 问题是命令行参数可以带空格或不带空格
  • 需要一种临时重定向 STDOUT 的方法

    我知道如何在 Linux 中重定向输出 问题是 我的 bash 脚本中有很多输出 我不想输入类似的内容 echo foo gt gt bar 一遍又一遍地 我更愿意做这样的事情 hey bash for the time being put
  • 按 bash 中的“最后一个”值分组

    我有一个两列的文件 1 112 1 123 2 123 2 124 2 144 3 158 4 123 4 158 5 123 我需要知道每列 1 的最后一列 2 值 1 123 2 144 3 158 4 158 5 123 如何做到这一
  • 为什么每次运行应用程序时都必须使用导出来定义 LD_LIBRARY_PATH?

    我有一些使用一些共享库的代码 gcc 上的 c 代码 编译时 我必须使用 I 和 L 显式定义包含目录和库目录 因为它们不在标准位置 当我尝试运行代码时 出现以下错误 sync test sync test error while load
  • Linux 上的 JavaFX

    Linux x86 和 x64 上的 JavaFX 情况如何 JavaFX 应用程序可以在 Linux 操作系统上顺利执行吗 我发现了 2011 年和 2012 年的一些问题 当时应用程序不稳定 目前发布的 JFX 版本是 2 2 4 在
  • Linux C++ 调试器

    我正在寻找完美的 Linux C 调试器 我不期望成功 但搜索应该提供丰富的信息 我是一个非常有能力的 gdb 用户 但 STL 和 Boost 很容易压垮我的调试技能 并不是说我无法深入了解数据结构的内部结构 而是它需要很长时间 我通常会
  • bash shell 嵌套 for 循环

    我想编写一个必须在 bash shell 提示符下工作的嵌套 for 循环 在单行命令中嵌套 for 循环 例如 for i in a b do echo i done a b 在上面的例子中 for循环是在单行命令中执行的 像这样 我在
  • cURL 错误 28:5001 毫秒后解析超时

    我使用 WordPress 最近将我的网站从 cpanel 主机移动到带有 directadmin 面板的 Linux 服务器 转账后立即发现客户在通过EDD插件下载时出现以下错误 cURL 错误 28 5001 毫秒后解析超时 我也遇到了
  • (Linux) 如何在没有显示环境的情况下运行gtk程序? Gtk-警告 **:无法打开显示:

    我有一个必须在 GTK gui 环境中运行的程序 我只能使用ssh 该程序将在服务器 centos 6 上运行并安装 gnome X 显示 不需要看GUI 但运行完成后 我就能得到答案 VNC 和远程屏幕已禁用 当我在 ssh 中启动程序时

随机推荐

  • Hibernate 覆盖 @transient

    我有一个映射的超类 它有一个我的数据库中的一些表共享的字段 我希望用 Transient 注释这个字段 这样大多数实体都会忽略它 但在子实体上 de Transient 或 un Transient 这可能吗 谢谢你 伊多布 您也许可以使用
  • 用于特定运行配置的 IntelliJ 键盘快捷键

    我有一个 JUnit 运行配置来运行所有单元测试 如何将键盘快捷键绑定到 JUnit 配置的运行 现在有一个第三方插件 将配置作为操作运行 https plugins jetbrains com plugin 9448 run config
  • 通过http协议上传位图到服务器

    我有一个相机活动 之后我拍照并将其保存到图库并上传到服务器我的上传代码不起作用 我需要这方面的帮助吗 图像捕捉 Intent intent new Intent android media action IMAGE CAPTURE star
  • 在日期时间数据类型中插入 NOW() 值将返回 0000-00-00 00:00:00

    我有一个数据库 它有一个完美运行的 NOW 函数 显示正确的日期 并且在不小心删除了它之后 我创建了一个类似的数据库 但是当我插入 NOW 来插入时 current 当前日期 它将插入为 0000 00 00 00 00 00 显示的警告是
  • 如何从 n x 3 数据集绘制非凸曲面

    R中有没有直接绘制非凸曲面的方法 我对凸面使用了类似以下的东西 效果很好 xyz lt cbind y x z tbr lt t surf tri xyz delaunayn xyz rgl triangles xyz tbr 1 xyz
  • 如何将许多 php 变量传递给 python

    我使用以下代码启动 python 脚本并向其传递 php 变量 tmp exec python path to pythonfile py myVariable mySecondVariable output 这工作得很好 我的问题是我需要
  • Etsy API 图片上传错误

    我有一个 oauth 连接 它可以很好地处理所有其他请求 但有一个 上传列表图像 这是代码 connection this gt getEtsyConnection imageApiUrl https openapi etsy com v2
  • 在 R 中使用多个更改参数应用函数

    我想对引用 R 数据框中的多列的所有行应用一个函数 例如 如果我有一个名为 data 的数据框 其中包含三个变量 var1 var2 和 var3 并且我想对每一行应用一个函数 myfunc lt function var1 var2 va
  • 获取音频文件大小而不导出

    我正在开发一个应用程序 用于导出存储在 iPod 库中的音频文件 但我应该在导出和上传之前验证文件大小 服务器有固定的最大上传大小 我知道导出文件后 大小不会相同 有什么方法可以估计新大小 主要问题 我可以在导出之前知道原始文件大小 使用
  • Python:为什么需要 functools.partial?

    部分应用很酷 有什么功能functools partial https docs python org 3 library functools html functools partial提供你无法通过 lambdas 的报价 gt gt
  • 使用 ColdFusion 的 reCaptcha v3

    我正在尝试将 reCaptcha v3 集成到 ColdFusion 站点 我对 CF 语法不太感兴趣 目前我似乎从服务器端的验证请求中没有得到任何返回 任何人都可以看到任何明显错误和 或请指出我正确的方向吗 客户端
  • 从firebase存储Xamarin获取图像下载url

    我试图从上传到 firebase 存储的照片中获取图像 url 以便我可以将图像的引用存储在另一个表中 这将使我能够在整个应用程序的其他位置显示图像 我目前有 private void UploadPhoto if filePAth nul
  • 如何使用 Python 从 Windows 7 中迭代连接的 iPhone 上的照片?

    当我将 iPhone 连接到 Windows 7 系统时 Windows 资源管理器会打开 DCIM 内容的虚拟文件夹 我可以通过 Pywin32 218 访问 shell 库接口 如下所述 我可以在 python 中使用库抽象吗 http
  • 需要配置的打字稿

    我正在构建一个 Web 应用程序 其中的开发不是基于 TypeScript 构建的 但是该应用程序具有我想要使用插件样式进行的集成点 这就是使用 TypeScript 的地方 TypeScript 代码位于第二个解决方案中 我将 js 文件
  • git status 报告新克隆的存储库中修改的文件

    Solved 远程存储库似乎包含两个名称相同的文件 除了第一个字母之外 这导致我的系统上的文件被覆盖 从而导致以下问题 Update 看起来它与换行符无关 但我还找不到解释 事情是这样的 git status报告FileStartingWi
  • 获取在 Windows 上构建轮错误 Pygame 的要求

    我正在尝试使用以下命令安装 Pygame pip install pygame我得到这个结果 pip 安装 pygame 收集pygame 使用缓存的 pygame 2 4 0 tar gz 13 2 MB 安装构建依赖项 完成 获取构建轮
  • 服务结构具有 100 万个键的可靠字典性能

    我正在使用包含约 100 万个键的可靠字典来评估 Service Fabric 的性能 我得到的结果相当令人失望 所以我想检查我的代码或我的期望是否错误 我有一本初始化的字典dict await stateManager GetOrAddA
  • jQuery.post 刷新我的页面?

    我的页面上有以下带有表单的代码 但是当我点击提交时 我的页面似乎刷新了 form
  • js如何将objectName打印到控制台

    使用 webdev 工具控制台时 如果输入浏览器对象 则会返回控制台 gt console Console gt console object Console gt console log console undefined gt Cons
  • rm 无法从脚本中通过通配符删除文件,但可以在 shell 提示符下工作

    我在 Linux shell 脚本中遇到了一个非常愚蠢的问题 我想删除目录中扩展名为 bz2 的所有文件 在我调用的脚本中 rm archivedir bz2 其中 archivedir 是目录路径 应该很简单 不是吗 不知何故 它因以下错