ls またはファイル グロビングで特定のファイルまたはディレクトリを無視することは可能ですか?

ls またはファイル グロビングで特定のファイルまたはディレクトリを無視することは可能ですか?

ls コマンド、ファイル グロビング、grep コマンドの使用で問題が発生しています。次のファイル/ディレクトリ ツリーを検討してください。

abc/
    def
    ghi.txt
    jkl

def/
    f01
    abc
    abc.txt

ghi.txt

たとえば、abc/ ディレクトリを完全に無視して、その他すべてを報告したいとします。試してみると、ls -lR -Iabc ./def/abc.txt ファイルは報告されますが、/def/abcファイルは無視されます。同様に、ls -lR . | grep -v abcここでもダメです。bash で私が望むことを実行する方法はありますか?

ghi.txtあるいは、 を無視して報告したいとしますabc/ghi.txt。これを bash で実行する方法はありますか?

答え1

bashでは、拡張グロビングが有効になっている場合、!(abc)を使用してディレクトリを逆順に一致させることができますabc。例:

$ tree
.
├── abc
│   ├── def
│   ├── ghi.txt
│   └── jkl
├── def
│   ├── abc
│   ├── abc.txt
│   └── f01
└── ghi.txt

2 directories, 7 files

そして

$ shopt extglob
extglob         on

それから

$ ls !(abc)
ghi.txt

def:
abc  abc.txt  f01

関連情報