bash - 如何在 bash for 循环中从更大的文件列表中复制/列出具有编号名称模式的文件?

标签 bash

我正在执行基本的 bash for 循环,将数据从一个目录复制到当前目录。

我的文件以此模式命名:

stuff.002.morestuff.nc

总共有 14 个文件,除了数量之外,名称都相同,但我从中复制的目录中有数百个文件。它从 002015。我只是想复制 002,003,004,...,014,015 但事实证明这比预期的要难;现在我只是做回显,以确保在将大量数据复制到计算机之前获得正确的名称。

我尝试过的最好的事情:

files=/path/to/dir/stuff.0*[02...15...03456789].morestuff.nc;
for f in $files; do echo $f; done

这给了我太多编号从 002035 的文件,这不是我需要的。

我很感谢任何对我的基本问题的回答,我真的很惊讶没有与此非常相似的东西。稍后我会担心复制的问题;这些名字现在让我发疯。抱歉,如果格式和行话不正确,这是我的第一个问题,而且我对此还很陌生。

最佳答案

最新版本的 bash 允许进行数字系列扩展,例如 {002..015},因此您可以执行以下操作:

cp some_dir/stuff.{002..015}.morestuff.nc some_other_dir/

当然,如果您不确定,最好先回显:

echo some_dir/stuff.{002..015}.morestuff.nc

此外,如果 stuffmorestuff 是半不可预测的,您可以使用 glob 来接受更广泛的文件名:

echo some_dir/*.{002..015}.*.nc
cp some_dir/*.{002..015}.*.nc some_other_dir/

请注意,如果 从 002 到 015 的每个 文件实际上不存在于 some_dir 中,您可能会收到有关文件丢失的错误,但请放心,所有确实存在的文件都会出现被复制,这就是目标。

关于bash - 如何在 bash for 循环中从更大的文件列表中复制/列出具有编号名称模式的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71879494/

相关文章:

javascript - PhantomJS 无法在 JavaScript 页面上运行,错误 "Activate JavaScript"

bash - BASH 处理数字的能力是否与处理器位宽成正比?

bash - wget 并在一行中运行/删除 bash 脚本

bash - 使用 read() 或 run() 运行 bash 命令时,我应该如何转义 '&&' 和其他特殊字符?

bash - 搜索匹配项,然后用上一行的值替换此匹配项后的值

bash - 为什么这个 Bash 脚本不会出错?

windows - 如何编写批处理(Windows)来启动Cygwin(mintty.exe),然后执行Python脚本?

java - jdb 中的文本导航在 bash 中不起作用

bash - 出于性能原因,bash 内置函数是否优于 UNIX 工具?

java - 如何在每个 json 对象处拆分 jq 输出