Shell
僅使用 echo 以特定方式選擇目錄和順序
我在 Unix 環境中沒有經驗,必須調整腳本。我想這是基本知識,但我無法通過Google搜尋找到一個簡單的解決方案。
該腳本獲取目錄中的所有 webappsrv 以重新啟動它們:
TMPLIST=`cd $MYWEBAPPSRV_DIR; /bin/echo *`
所以這會返回一個這樣的列表:
myAppSrv_1 myAppSrv_11 myAppSrv_12 myAppSrv_2 myAppSrv_3 ... myApSrv_9 somescript somemorescriptfiles
如何排除腳本文件並只選擇想要的目錄?以及如何以簡單的方式更改順序,因為伺服器需要按數字順序(1、2、3、…、11、12)重新啟動?我無法重命名目錄。我知道可以將目錄分解為文本和數字部分,然後按數字部分重新排序,但是有沒有更簡單的選項,比如特殊的排序參數?
像這樣改變它..並試一試
TMPLIST=`cd $MYWEBAPPSRV_DIR; ls -l | awk '/myApp/{print $NF}' | sort -t_ -n -k2` TMPLIST=`cd $MYWEBAPPSRV_DIR; ls -1 | awk '/myApp/' | sort -t_ -n -k2`
Zsh在大多數發行版上都可用,但通常不是預設安裝的一部分。如果安裝它不是問題,請使用它,因為它的glob 限定符功能很容易解決您的問題:
#!/bin/zsh cd $MYWEBAPPSRV_DIR TMPLIST=(*(/n)) for app in $TMPLIST; do … done
glob
*
列出所有文件(點文件除外),然後 glob 限定符/
僅選擇目錄文件,並n
導致數字序列的數字排序而不是預設的字典順序。如果您不想更改目錄,但想從匹配項中排除目錄部分,則使用歷史擴展修飾符僅保留基本名稱部分:#!/bin/zsh TMPLIST=($MYWEBAPPSRV_DIR/*(/n:t)) for app in $TMPLIST; do … done
如果安裝 zsh 不實用,並且您正在執行帶有 GNU coreutils 的系統(例如,非嵌入式 Linux、Cygwin)並且文件名不包含特殊字元(空格或萬用字元),那麼您可以使用
ls -v
對文件名進行排序數字序列的數字順序,並-F
顯示與文本過濾器相結合的文件類型以僅選擇目錄。TMPLIST=$(ls -Fv $MYWEBAPPSRV_DIR | sed -n 's!/$!!p') for app in $TMPLIST; do … done