我正在执行基本的 bash for 循环,将数据从一个目录复制到当前目录。
我的文件以此模式命名:
stuff.002.morestuff.nc
总共有 14 个文件,除了数量之外,名称都相同,但我从中复制的目录中有数百个文件。它从 002
到 015
。我只是想复制 002,003,004,...,014,015
但事实证明这比预期的要难;现在我只是做回显,以确保在将大量数据复制到计算机之前获得正确的名称。
我尝试过的最好的事情:
files=/path/to/dir/stuff.0*[02...15...03456789].morestuff.nc;
for f in $files; do echo $f; done
这给了我太多编号从 002
到 035
的文件,这不是我需要的。
我很感谢任何对我的基本问题的回答,我真的很惊讶没有与此非常相似的东西。稍后我会担心复制的问题;这些名字现在让我发疯。抱歉,如果格式和行话不正确,这是我的第一个问题,而且我对此还很陌生。
最佳答案
最新版本的 bash
允许进行数字系列扩展,例如 {002..015}
,因此您可以执行以下操作:
cp some_dir/stuff.{002..015}.morestuff.nc some_other_dir/
当然,如果您不确定,最好先回显:
echo some_dir/stuff.{002..015}.morestuff.nc
此外,如果 stuff
和 morestuff
是半不可预测的,您可以使用 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/