我有两个文件需要运行各种命令。这两个文件具有完全相同的名称,但位于不同的文件夹中。麻烦在于文件夹名称。我可以指望这些文件夹:
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
再次感谢大家,任何人,感谢你的知识。
答案 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