bashを使用して別のディレクトリから特定のファイルを選択する方法は?

bashを使用して別のディレクトリから特定のファイルを選択する方法は?

次のように、ディレクトリ内の一部のファイルを一覧表示(または削除または他の操作を実行)したいと思います。

$ 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に移動せずに)これを達成するにはどうすればよいですか?

答え1

中かっこを使用してください。

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

もっと情報が欲しいなら読んでください支柱の拡張

答え2

bashで実行shopt -s extglob(またはこれをあなたのものに入れてください~/.bashrc)。他のものを使用することができます模様珍しい構文(kshから継承)で正規表現を提供します。もちろん、kshでもこれらのモードを使用でき、zsh以降もこれらのモードを使用できます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)最も簡単な方法です。

答え3

以下を使用してフィルタリングできますegrep

ls | egrep '(aa|bb|cc)'

すべてのテキストファイルを見つけるには:

ls | egrep '(aa|bb|cc).txt'

答え4

まずご案内いたします。lsを決して解析しないでください一度。目的のタスクを実行する正確で正式な方法は次のとおりです。探す

たとえば、

find /opt/somedir -regex '.*[aa|bb|cc].*' -exec mv '{}' ~/backup \;

私は通常より簡単なので、-name代わりに使用します。-regexただし、正規表現はユースケースに適しています。コマンドを実行する必要がありますいいえ -exec移動/削除したいファイルが正しいことを初めて確認してください。

関連情報