2011-07-12 123 views
0

bash腳本是我的腳本的例子:使用通配符

#!/bin/bash 
cd /upper/folder.test*/subfolder 
ls 

的folder.test文件夾5事實上名爲類似「folder.test13kwekrjk1234jk3」,它是完全隨機的,所以我想用通配符。 「上」文件夾在根目錄中,我想要它和CD命令在腳本之外工作(並且我正在根目錄中執行它,就像腳本一樣)

但是,當我執行(使用。 /),它給了我:

「 - 沒有這樣的文件或目錄] CD:/upper/folder.test*/subfolder」

是怎麼回事?它在腳本之外工作,但不會在腳本內工作?我應該在劇本中以不同的方式做到這一點嗎?

+0

我不能讓這個失敗像你有它,但也要注意,你所擁有的腳本只會在第一次出現時纔會「ls」,而不是其他時間。然而,像ls/upper/folder.test * /子文件夾這樣的東西可以工作。另外,你使用的是什麼操作系統或版本的bash? –

+0

它適用於我的bash版本。你有多個目錄與模式匹配嗎? – Nicolas

+0

這不是一個混淆通配符與文件名* globbing *的情況嗎?像'ls/upper/folder.test */subfolder'這樣的東西可以工作,因爲星號的外殼擴展,但在'cd'命令中擴展是沒有意義的。你只能'cd'到*一個*文件夾 – pavium

回答

2

你可以這樣做,因爲通配符是字面上的通配符,它​​們的行爲很難預測並且不太可靠。

FOLDER=$(ls -1 /upper/folder.test*/subfolder | head -n1); 
cd "$FOLDER" 
ls 
+0

只是一個暗示,'-1'是多餘的,只要'ls's標準輸出不是終端,它就會將格式設置爲單列,顏色。 – carlpett

+0

還有一點需要注意的是,如果你試圖用這個來檢測一個目錄路徑,你還需要'-d'標誌到'ls'。至少在Centos 5.x中,無論如何。 – pospi

0

我曾經有一個相關的問題,當我嘗試使用「〜」在bash腳本中cd到我的主目錄時。

此代碼工作在終端,但不是在我的腳本:

cd ~/Documents/important_folder* 

但是,下面的代碼在腳本運行良好:

cd /home/my_username/Documents/important_folder*