2015-06-19 30 views
0

我有2個文件需要運行各種命令。這兩個文件具有完全相同的名稱,但位於不同的文件夾中。麻煩在於文件夾名稱中。我可以指望這些文件夾相關的事情:在類似(但不同)命名目錄中處理文件

1)通往文件夾的路徑將始終是相同的。

2)第一個文件夾將始終在名稱中包含一個連字符。

a。第一個連字符在所有服務器上都是相同的。

b。第一個連字符在不同服務器之間會有所不同,但在同一臺服務器上(例如服務器名稱,但並非總是專門指定服務器名稱)相同。

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命令(爲了簡單起見,「貓」),以便它權威地在一個文件上對另一個文件進行操作?

對於exampe,這樣的:

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

這肯定會給我 「同nameX-ABC123/sameFileName」 的內容

然而,這樣的:

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 

再次,謝謝你,大家,任何人,你的知識。

回答

2

我會建議使用擴展的水珠,以配合您的每一個案件的第一個文件:

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

此模式將匹配不包含其他任何-目錄名。

+0

測試與 「!貓/相同/ FLD /路/ DIR1 /同 - (\ * - \ *)/ sameFileName」< - 到目前爲止,這對我來說很有用,而OMG謝謝你!不過好奇心,有沒有一種方法不使用「extglob」?我需要這個腳本,但是我希望能夠在命令行中使用,或者通過電子郵件發送給其他人。我已經測試過「cat/same/fld/path/dir1/same - [[:alnum:]]/sameFileName」,但那也行不通。 – RussNS

+0

沒有extglob,可能有一種解決方法,但是您始終可以在交互式shell中以相同的方式啓用它,所以這將是我的建議。 –

0

我想你可以嘗試使用字符範圍如下:

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

+1

這個答案目前寫的方式使它聽起來像它應該是一個評論。你能否將你的答案說得更具體一些,或者提供關於你的'貓'命令的附加信息? – JAL

+0

我試過了你的答案,但是根據我的理解,[a-zA-Z $]只是最後一個字符的測試,以確保它是字母(小寫或大寫)。我的需求不是基於單個字符,而是缺少第二個連字符。我嘗試過「cat/same/fld/path/dir1/same - [[:alnum:]]/sameFileName」,但那也不算什麼。 – RussNS

+0

@RussNS'[a-zA-Z $]'表示一個字母或char'$'本身。它並不意味着它在括號內。 – Marki555

相關問題