我有 2 个文件,我需要在其上运行各种命令。 这两个文件具有完全相同的名称,但位于不同的文件夹中。 问题出在文件夹名称上。 关于文件夹,我可以指望这些东西:
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
这肯定会给我"同名X-abc123/相同文件名"的内容
但是,这:
cat /same/fld/path/dir1/same-*/sameFileName
这是行不通的,因为它会影响两个文件,我想专门处理文件".../same-nameX/sameFileName"。
任何帮助将不胜感激。
为了更加清楚,此问题与具有单个字符差异的文件夹名称无关。 它与明显不同的文件夹有关,但区别在于"连字符"之间。 以下是一些示例:
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
再次感谢大家,任何人,感谢你们的知识。
我建议使用扩展的 glob 来匹配每种情况下的第一个文件:
shopt -s extglob # enable extended globbing
cat /same/fld/path/dir1/same-!(*-)/sameFileName
此模式将匹配不包含其他-
的任何目录名称。
我认为您可以尝试使用这样的字符范围:
cat /same/fld/path/dir1/same-name[a-zA-Z$]/sameFileName