Bash

檢查多個目錄屬性

  • January 14, 2014

我想盡快完成這個測試:(Bash

if [[ -d $directory_path && -r $directory_path && -x $directory_path ]]

這是最有效的。

您可以通過查看strace(或 Linux 以外的 unix 變體上的等效項)來查看 shell 的系統呼叫。

strace bash -c '[[ -d $directory_path && -r $directory_path && -x $directory_path ]]'
…
stat64("foo", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
faccessat(AT_FDCWD, "foo", R_OK)        = 0
faccessat(AT_FDCWD, "foo", X_OK)        = 0
…

這幾乎和它一樣好。一個系統呼叫檢查文件類型 ( -d),一個系統呼叫檢查每個權限。雖然 bash 可以嘗試從文件模式推斷訪問權限,但這僅適用於沒有訪問控制列表的系統。

這兩個呼叫faccessat可以合併;bash、ksh 和 dash 都不夠聰明,無法做到這一點。但收益將是微乎其微的。inode 將在記憶體中,因此重複系統呼叫的成本將非常小。如果您真的需要這種微效率,那麼您一開始就不會編寫 shell 腳本。

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