Bash

如何使用 bash 在不同目錄中選擇特定文件?

  • December 30, 2011

我想在目錄中的某些文件上列出(或刪除或執行一些其他操作),如下所示:

$ ls /opt/somedir/
aa  bb  cc  aa.txt  bb.txt  cc.txt
$ ls /opt/somedir/(aa|bb|cc)  ## pseudo-bash :p
aa  bb  cc

我怎樣才能做到這一點(沒有先 cd-ing 到目錄)?

使用花括號:

ls /opt/somedir/{aa,bb,cc}

有關大括號擴展的更多資訊,請閱讀。

在 bash 下,執行shopt -s extglob(或將其放入您的 .bash文件中~/.bashrc),您可以使用其他模式來提供具有不尋常語法的正則表達式(繼承自 ksh)。當然,您也可以在 ksh 中使用這些模式,也可以在 zsh after 中使用這些模式setopt ksh_glob

$ shopt -s extglob
$ ls /opt/somedir/@(aa|bb|cc|doesnotexist)
/opt/somedir/aa   /opt/somedir/bb  /opt/somedir/cc

在 zsh 中,可以直接(foo|bar)作為模式使用。

% ls /opt/somedir/(aa|bb|cc|doesnotexist)
/opt/somedir/aa   /opt/somedir/bb  /opt/somedir/cc

請注意,該命令是使用完整路徑呼叫的。如果要使用短路徑呼叫命令,則需要以某種方式更改目錄,(cd /opt/somedir && somecommand aa bb cc)這是迄今為止最簡單的方法。

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