使用远程数据扩展 Bash glob 模式

标签 bash ubuntu s3cmd

我错误地这样做了:

s3cmd del s3://mybucket/*

但是......它正在工作:
...
delete: 's3://mybucket/file0080.bin'
delete: 's3://mybucket/file0081.bin'
delete: 's3://mybucket/file0082.bin'
...

我很困惑。通常 *由 shell (Bash) 扩展,使用 localhost 中提供的信息.

扩展如何/为什么对 s3 起作用桶?

(这是一个未引用的 glob 模式)

最佳答案

如果 glob 不匹配任何内容,它将保持原样(除非您在 Bash 中设置了 nullglob 选项),在这种情况下带有星号,s3cmd del显然明白这一点。

当然,依赖这种行为并不是一个好主意,因为如果突然存在与 glob 匹配的本地文件,它将(可能)停止工作。引用 glob(即使其不是 glob)是一个好习惯。

另一个选项是设置 nullglob选项 ( shopt -s nullglob ) 使不匹配的 glob 完全消失。

要查看 glob 如何扩展以及最终命令的外观,您可以运行 set -x在 Bash 中运行它,这使得 Bash 在运行之前打印每个(扩展的)命令(set +x 将其关闭)。

关于使用远程数据扩展 Bash glob 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50488022/

相关文章:

bash - linux 中的 sed 命令。如何使用 sed 只替换前 n 个匹配项

python - 使用 bash 文件运行两个 python 脚本

linux - 如何提取列以释放命令

reactjs - s3cmd 用错误的 MIME 类型标记 CSS

linux - 需要一些帮助编写 shell 脚本来添加数字

php - 在 ubuntu 未满足的依赖项中安装 GD 库

mysql - 如何在 ubuntu-18.04 mariadb mysql 5.7 上设置 lower_case_table_names = 1

c - 内核 Makefile 不会为我的模块创建任何 .ko 文件

linux - 如何禁用分段上传以便同步匹配 s3cmd 中本地和远程文件的 md5sum

bash - s3cmd sync 将错误的文件远程复制到错误的位置