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