ls:ワイルドカード検索では、同じパターンに一致するディレクトリを表示せずにファイルのみを表示します。

ls:ワイルドカード検索では、同じパターンに一致するディレクトリを表示せずにファイルのみを表示します。

次の一般的なビジネスPCの状況があるとします。

drwxr-xr-x 1 whatever whoever       3 Oct  3 16:40 invoices2009
drwxr-xr-x 1 whatever whoever       4 Oct  3 16:40 invoices2010
drwxr-xr-x 1 whatever whoever       2 Oct  3 16:40 invoices2011
-rwxr-xr-x 1 whatever whoever  440575 Oct  3 16:40 tax2010_1
-rwxr-xr-x 1 whatever whoever  461762 Oct  3 16:40 tax2010_2
-rwxr-xr-x 1 whatever whoever  609123 Oct  3 16:40 tax2010_3

それでは、怠惰に直接入力してみましょう。

$ ls -l *2010*

あると仮定はいInvoice 2010 ディレクトリの一部が期待どおりに動作しません。 ~からディレクトリ名含む2010年年、lsファイルも一覧表示されます。2010年請求書、現在ディレクトリにある項目だけをリストしたいと思います。もっと興味深いのは、Tax2010*ファイルがまったく存在せず、例のように3つのディレクトリの代わりに50があると想像してみてください。はい、試してみました。lsでも見せるどのファイルがどのディレクトリにあるのか、すべてのファイルが現在のディレクトリにあるかのように上から下にリストします(その-Rオプションを明示的に指定しない限り、私は確かに知っています)。

また、これを行うためにも使用できることを知っていますが、単純な1行のコードでこれを実行するfind他の方法はありますか(明らかにその構文ははるかに簡単です)?ls

答え1

あなたの質問は、「ディレクトリだけを除いてパターンごとにファイルを一覧表示する方法」のようですls

pureではこれを行う方法はありませんlsls+を組み合わせることができますgrep。たとえば、次のようになります。

ls -ld *2010* | grep -v '^d'

ただし、以下を使用することをお勧めしますfind

find . -maxdepth 1 -type f -name "*2010*"

答え2

ls -dlp *2010*これは解決策の良い始まりになるかもしれませんが、望む出力形状に依存します。

答え3

で述べたように、ls.you needfindまたはのみ使用することはできません。ls | grepラッシュの答え。しかし、あなたの具体的な例に答えるとあなたのコメント:

繰り返しますが、現在のディレクトリにある税*ファイルを一覧表示したいのですが、 "invoices2010"ディレクトリは同じ作業ディレクトリにあり、指定されたファイルとも一致します。2010年リストからワイルドカードパターンをスキップする必要があります。

あなたはできます

ls -l --ignore='invoices*' *tax2010*

ignoreシェルパターンに一致するすべてをフィルタリングします。

答え4

lsでgrepを使用しないでください。

Bashでは、名前に「2010」があるが数字で始まらないファイルを表示できます。

ls -l *[!0-9]2010*

関連情報