我正在尝试连接名称相似但位于不同子目录中的所有文件。
我找到了这个用于精确文件匹配的解决方案,但我不确定如何使其适应部分匹配
示例文件路径:
out/ch1/name1.1.assoc.txt
out/ch1/name2.1.assoc.txt
out/ch1/name3.1.assoc.txt
out/ch2/name1.2.assoc.txt
out/ch2/name2.2.assoc.txt
out/ch2/name3.2.assoc.txt
我有 20 个不同的 ch 目录,文件名中的最终数字与目录号匹配。
我有一个文件,其中包含我要连接的名称。
name1
name2
name3
我如何调整此解决方案或以其他方式连接此文件?最终结果 我想要一个目录,其中文件列表中的每个名称都有一个文件(在本例中,最终结果将是 3 个名为 name1、name2 和 name3 的文件)。我们
答案1
在zsh
:
for name (${(f)"$(<names.txt)"})
cat -- out/ch<->/$name.<->.assoc.txt(.n) > outdir/$name
在bash
:
zsh -c '
for name (${(f)"$(<names.txt)"})
cat -- out/ch<->/$name.<->.assoc.txt(.n) > outdir/$name
'
如果你无法安装,你可以在 GNU 系统中或在 GNU 系统上zsh
执行一些操作:bash
readarray -t files < <(grep . names.txt)
shopt -s extglob failglob
for name in "${files[@]}"; do
printf '%s\0' out/ch+([0123456789])/"$name".+([0123456789]).assoc.txt |
sort -zV |
xargs -r0 cat -- > outdir/"$name"
done