Shell

如何在不實際使用萬用字元或 shell 擴展的情況下進入 foo-* 文件夾?

  • October 19, 2014

短篇故事

我正在尋找進入第一個找到的foo-something目錄的命令,例如:

cd foo-*

但不使用萬用字元(或其他特殊的 shell 字元)。

很長的故事

作為遠端 drush 建構腳本的一部分,我試圖找到輸入文件夾的方法,其中文件夾名稱可以更改,但它有共同的前綴。相同的範例:drush -y dl adsdrush -y dl ads --dev下載ads-7.x-1.0-alpha1ads-7.x-1.x-dev)。

為了使事情變得更棘手,該命令不能包含萬用字元轉義分號,因為 drush 大量轉義 shell 別名。

所以ls *被逃入ls '\''*'\'''並以Command ls '*' failed.錯誤告終。

我也嘗試過使用find,但我不能使用-exec主要,因為分號需要轉義,而 drush 將其雙重轉義為 ( '\''\;'\'')。

因此,如果可能的話,我希望在foo-*不使用萬用字元(或任何其他特殊字元、參數擴展、命令替換、算術擴展等)的情況下進入文件夾。

我相信 shell 轉義的邏輯就在這裡,它的工作方式escapeshellarg()與在 Linux 上的工作方式相同。它的作用是轉義每個參數。

drush mung 反引號和豎線嗎?如果沒有,您可以使用

cd `ls | grep foo- | head -n 1`

如果反引號不起作用,但是|,$和do ()那麼您可以將上面的內容更改為

cd $(ls | grep foo- | head -n 1)

如果|不工作,但是$(並且)做,那麼你可以做

cd $(myprog)

myprog您編寫的用於確定目錄名稱的腳本在哪裡。

另外-我不明白您如何可以find用來幫助您做 a cd,但是,您能-exec以 a結尾+嗎?

您也可以嘗試使用locate實用程序,例如:

updatedb -o ~/tmp.db -l0 -U $PWD; cd $(locate -d ~/tmp.db -l 1 -b -r foo-)

對於更複雜的正則表達式模式檢查info locate

引用自:https://unix.stackexchange.com/questions/162779