【发布时间】:2017-06-04 18:48:42
【问题描述】:
我的目录结构如下:
├── 15_10_29
│ ├── NAME
│ ├── NAME_2
│ ├── NAME_3
│ ├── NAME_4
│ └── NAME_5
├── 15_11_09
│ ├── NAME
│ ├── NAME_2
│ ├── NAME_3
│ └── NAME_4
└── 15_11_17
├── NAME
├── NAME_2
├── NAME_3
└── NAME_4
在每个 NAME 子目录中都有一个名为 atom.pdb 的文件。我想返回具有相同“NAME”目录名称的 atom.pdb 文件列表。
./15_10_29/NAME/atom.pdb
./15_11_09/NAME/atom.pdb
./15_11_17/NAME/atom.pdb
./15_10_29/NAME_2/atom.pdb
./15_11_09/NAME_2/atom.pdb
./15_11_17/NAME_2/atom.pdb
...等等等等。
我似乎无法概念化如何做到这一点。我想我想使用 find 但我更擅长使用 bash globbing,在这种情况下代码必须很长,所以我确信有一个更优雅的解决方案。
编辑:
find . -wholename '*atom.pdb' | sort -t / -k3,3 正在返回所需的结果:
./15_10_29/NAME/atom.pdb
./15_11_09/NAME/atom.pdb
./15_11_17/NAME/atom.pdb
./15_10_29/NAME_2/atom.pdb
./15_11_09/NAME_2/atom.pdb
./15_11_17/NAME_2/atom.pdb
./15_10_29/NAME_3/atom.pdb
./15_11_09/NAME_3/atom.pdb
./15_11_17/NAME_3/atom.pdb
./15_10_29/NAME_4/atom.pdb
./15_11_09/NAME_4/atom.pdb
./15_11_17/NAME_4/atom.pdb
./15_10_29/NAME_5/atom.pdb
但现在我不确定如何解析这些并通过“NAME”将它们分解以存储在数组或连接的字符串变量中。
编辑 2: 这是我想出的:
ARR=()
for i in /*/*/ ; do
ARR+=($(basename ${i}))
done
while read i; do
ARR2=(/*/${i}/atom.pdb)
echo ${ARR2[@]}
done < <(echo ${ARR[@]} | tr " " "\n" | sort -u)
【问题讨论】:
-
为什么不直接
find . -name atom.pdb -print? -
我需要按基本名称对输出进行分组,以便将其分批输入另一个程序。这是我在寻找匹配的基本名称的逻辑。使用 find 打印所有 pdb 文件并按日期目录而不是基本名称对它们进行排序。
-
你的基本名字只是
atom.pdb,对吧? -
基本名称为“NAME”、“NAME_2”等
标签: bash loops sorting find glob