对于具有相同前缀的每对文件,执行代码

时间:2018-01-15 16:02:21

标签: linux bash

我有一个很大的目录列表,每个目录都包含不同数量的“配对”文件。通过配对,我的意思是两个文件的前缀相同,并且这些对被表示为“a”和“b”。前缀也不遵循定义的模式。我的更广泛的意图是编写一个bash脚本,它将列出给定目录中的所有子目录,cd到每个目录,找到文件对,并在对上执行一个函数。这是一个示例目录:

Dir1
    123_a.txt
    234_a.txt
    123_b.txt
    234_b.txt

Dir2
    345_a.txt
    345_b.txt

Dir3
    456_a.txt
    567_a.txt
    678_a.txt
    456_b.txt
    567_b.txt
    678_b.txt

我可以使用此代码循环思考每个目录:

for d in ./*/ ; do (cd "$d" && script.sh); done

在script.sh中,我一直在编写一个脚本来查找所有文件对(这是我正在努力解决的问题),然后调用我想要应用于这些文件的函数。这是我一直在努力的要点:

for file in ./*_a.txt; do (find the paired file with *_b.txt && run_function.sh); done

我已经将问题分解为需要为_a.txt文件获取“*”的值,然后使用此值搜索目录以匹配_b.txt后缀,并创建一个我可以将它们放入的子目录所以我可以应用run_function.sh。所以Dir1将包含子目录123和234。

如果这没有意义,请告诉我。我正在努力解决的问题部分是匹配没有定义前缀的文件。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

使用参数扩展:

#!/bin/bash
file=123_a.txt
prefix=${file%_a.txt}  # remove _a.txt from the right
second=${prefix}_b.txt
if [[ -f $second ]] ; then
    run_function "$file" "$second"
fi