2017-05-19 133 views
0

排序讓我們假設我有一個文件夾一些XML文件:Unix的查找和使用通配符

  • A-AS-jdbc.xml中
  • Z-AS-jdbc.xml中
  • FA-JDBC .XML
  • config.xml中
  • router.xml
  • paster.xml
  • cleardown.xml

我想通過某種排序命令使用通配符和自定義排序邏輯進行查找。

那是因爲我希望返回的文件名順序始終相同。

例如,我想總是:

  • 1元素: 「config.xml中」
  • 2元素: 「*。作爲-jdbc.xml中」
  • 3元素:「-jdbc .XML」(排除模式 「如-JDBC」)
  • 4元素: 「router.xml」
  • 等等...

我該如何做到這一點?任何想法? 我做到了,在過去使用數組但不記得我現在到底有沒有...

感謝

+0

我沒有清楚地看到你想要的模式,你可以嘗試澄清? –

+0

要遵循的模式正是我在示例中放置的順序,我希望LS輸出總是按如下排序:首先是config.xml,然後是「* .as-jdbc.xml」,然後是「-jdbc.xml」(不包括模式「.as-jdbc」)等等...... – ivoruJavaBoy

+0

那麼貼膜和清除呢? –

回答

3

不算漂亮,但:

rules.txt:

config\.xml 
.*\.as\-jdbc\.xml 
^[^-]*\-jdbc\.xml 
router\.xml 

命令:

$ find /path/to/dir > /tmp/result.txt 
$ cat rules.txt | xargs -I{} grep -E "{}" /tmp/result.txt 
config.xml 
a-as-jdbc.xml 
z-as-jdbc.xml 
fa-jdbc.xml 
router.xml 

您將不得不添加0123所需的其他模式和cleardown

+0

感謝所有人,所有答案看起來不錯,並且有幫助,但是這個允許我修改訂單而不改變腳本......我要測試它! :) – ivoruJavaBoy

1

在像Python這樣的高級語言中這樣做肯定更容易。

這不是一個排序問題;這是一個訂購問題。因此,您不能使用Unix排序命令。

不可避免地,你將需要4次反正,所以我會做兩種:

$ find /tmp/alex -name config.xml ; \ 
> find /tmp/alex -name *-as-jdbc.xml ; \ 
> find /tmp/alex \(\! -name *-as-jdbc.xml -a -name *-jdbc.xml \) ; \ 
> find /tmp/alex \(-type f -a \! -name config.xml -a \! -name *-jdbc.xml \) 
/tmp/alex/config.xml 
/tmp/alex/a-as-jdbc.xml 
/tmp/alex/z-as-jdbc.xml 
/tmp/alex/fa-jdbc.xml 
/tmp/alex/cleardown.xml 
/tmp/alex/paster.xml 
/tmp/alex/router.xml 

或者使用grep:

$ find /tmp/alex -type f > /tmp/aaa 
$ grep /config.xml /tmp/aaa ; \ 
> grep -- -as-jdbc.xml /tmp/aaa ; \ 
> grep -- -jdbc.xml /tmp/aaa | grep -v -- -as-jdbc.xml ; \ 
> egrep -v '(?:config.xml|-jdbc.xml)' /tmp/aaa 
/tmp/alex/config.xml 
/tmp/alex/a-as-jdbc.xml 
/tmp/alex/z-as-jdbc.xml 
/tmp/alex/fa-jdbc.xml 
/tmp/alex/cleardown.xml 
/tmp/alex/paster.xml 
/tmp/alex/router.xml 
0

我建議只是把你的發現的順序命令你想要:

$ find . -name config.xml; \ 
> find . -name \*.as-jdbc.xm; \ 
> find . -name \*-jdbc.xml -a ! -name \*as-jdbc.xml; \ 
> find . -name router.xml; \ 
> ... and so on.