2011-11-09 33 views
2

如何對存在目錄模式進行內聯測試?如果目錄模式存在,則Bash測試並執行

如果目錄模式存在,那麼我想chmod該模式。

例如我試圖做到以下幾點:

[ -d /usr/local/myproject/*/bin ] && chmod +x /usr/local/myproject/*/bin/* 

但這給了我錯誤「-bash:[:too many arguments」。

回答

5

沒有必要進行測試:

chmod +x /usr/local/myproject/*/bin/* 2>/dev/null 
+1

你知道,那更好。我最初是想「太多爭論?找到救援!」但是,如果有很多目錄匹配,我的解決方案將無濟於事。 tl;博士@yi_H是對的,你應該給他一個餅乾。 – Sorpigal

1

爲了挽回我的答案中的一些用處,只是假設你有太多的bin目錄,你無法做到這一點yi_H的方式。

find /usr/local/myproject/ -path '/usr/local/myproject/*/bin' -maxdepth 2 -type d -exec chmod a+x {} + 2>/dev/null 
+0

我想要達到的目標是不會引發錯誤(返回碼1)如果該目錄樣式不存在。如果模式不存在,這仍會引發錯誤。 – Cerin

+0

@Cerin:更新的版本不會。另外,你爲什麼在意?只要壓制錯誤。如果這是你不喜歡的返回碼加|| true' – Sorpigal

+0

我在另一個應用程序中運行這個應用程序,我沒有完全控制它,因此無法輕易修改它以忽略返回代碼。 – Cerin

2

它不起作用,因爲-d測試需要一個參數。你似乎通過不止一個。一個修復程序是:

for dir in /usr/local/myproject/*/bin; do 
    [[ -d $dir ]] && chmod +x $dir/* 
done