Shell,复制同名文件

Shell, copy files with similar names

我想从当前目录复制一系列类似的文件到目标目录,当前目录下的文件是:

prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0001_ux.hst
prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0001_uz.hst
prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0002_ux.hst
prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0002_uz.hst
prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0003_ux.hst
prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0003_uz.hst

其中 sim 是从 sim0001sim0500f 是从 f0001f0009。我只需要 f0002f0005f0008。我写了下面的代码:

target_dir="projects/data"

for i in {0001..0500}; do
    for s in f000{2,5,8}; do
        files="[*]$i[*]$s[*]"
        cp $files target_dir
    done
done

我是 Shell 的新手,想知道如何写 $files="[*]$i[*]$s[*]"$,以便它只能匹配 f0002f0005 和 [=21] =].我也用for i in {0001..0500}; do的原因是文件太大,我想确保我能在开始时访问一些完整的(例如,包括所有sim0001)。

编辑:将 for s in f0002 f0005 f0008; do 更改为 f000{2,5,8}

你需要的是globbing and a bit different quoting:

cp *"$i"*"$s"* "$target_dir"

不将其存储在变量中是有意为之 - 这样速度更快且更安全。如果你最终得到如此大的文件列表,你开始 运行 进入系统限制,你将不得不研究 xargs.