处理类似(但不同)命名目录中的文件

时间:2015-06-19 13:11:10

标签: bash shell

我有两个文件需要运行各种命令。这两个文件具有完全相同的名称,但位于不同的文件夹中。麻烦在于文件夹名称。我可以指望这些文件夹:

1)通往文件夹的路径始终相同。

2)第一个文件夹将始终在名称中包含一个连字符。

一个。在所有服务器上第一个连字符相同之前。

湾第一个连字符在不同服务器之后会有所不同,但在同一服务器上相同(如服务器名,但并不总是特定的服务器名)。

3)第二个文件夹将始终包含与第一个文件夹相同的名称,但是带有第二个连字符以及另一个随机字符集。

这是一个更直观的细分:

Server01
    /same/fld/path/dir1/
                    |
                    +--same-nameX/
                    |         |
                    |         +--sameFileName
                    |
                    +--same-nameX-abc123/
                              |
                              +--sameFileName

Server02
    /same/fld/path/dir1/
                    |
                    +--same-nameY/
                    |         |
                    |         +--sameFileName
                    |
                    +--same-nameY-a1b2c3/
                              |
                              +--sameFileName

我正在用bash编写脚本,而且我正在尝试编写一个无论我运行它的服务器都能运行的脚本。

所以我的问题是,我如何制定一个bash命令(为简单起见," cat"),以便它在一个文件与另一个文件之间权威地工作?

例如,这个:

cat /same/fld/path/dir1/same-*-*/sameFileName

这肯定会给我" same-nameX-abc123 / sameFileName"

的内容

但是,这个:

cat /same/fld/path/dir1/same-*/sameFileName

这不会起作用,因为它会影响这两个文件,我想专门处理文件" ... / same-nameX / sameFileName"。

任何帮助都将不胜感激。

为了增加额外的清晰度,此问题与具有单个字符差异的文件夹名称无关。它与文件夹有很大不同,但区别在于#14;连字符"。以下是一些例子:

Server03
    /same/fld/path/dir1/same-zxy12/sameFileName
    /same/fld/path/dir1/same-zxy12-xYz/sameFileName

Server04
    /same/fld/path/dir1/same-g1f2e3d4/sameFileName
    /same/fld/path/dir1/same-g1f2e3d4-ab12c345/sameFileName

Server05
    /same/fld/path/dir1/same-nmo/sameFileName
    /same/fld/path/dir1/same-nmo-ab/sameFileName

再次感谢大家,任何人,感谢你的知识。

2 个答案:

答案 0 :(得分:2)

我建议使用扩展的glob来匹配每个案例中的第一个文件:

shopt -s extglob # enable extended globbing
cat /same/fld/path/dir1/same-!(*-)/sameFileName

此模式将匹配任何不包含其他-的目录名称。

答案 1 :(得分:0)

我认为您可以尝试使用这样的字符范围:

cat /same/fld/path/dir1/same-name[a-zA-Z$]/sameFileName