次の一般的なビジネス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ではこれを行う方法はありませんls
。ls
+を組み合わせることができますgrep
。たとえば、次のようになります。
ls -ld *2010* | grep -v '^d'
ただし、以下を使用することをお勧めしますfind
。
find . -maxdepth 1 -type f -name "*2010*"
答え2
ls -dlp *2010*
これは解決策の良い始まりになるかもしれませんが、望む出力形状に依存します。
答え3
答え4
lsでgrepを使用しないでください。
Bashでは、名前に「2010」があるが数字で始まらないファイルを表示できます。
ls -l *[!0-9]2010*