指定された拡張子を持つファイルを除いて、ディレクトリ内のすべてのファイルを一覧表示する方法は?

指定された拡張子を持つファイルを除いて、ディレクトリ内のすべてのファイルを一覧表示する方法は?

次のフォルダがあるとしましょう。。 txt.pdfその他のファイル。 「その他」ファイル(拡張子のないファイルなど)を一覧表示したいと思います。。 txtまたは.pdf)。これを行う方法に関する提案はありますか?

特定の拡張子なしでファイルを一覧表示する方法を知っています。たとえば、リストを作成したい場合。 txtファイルを作成してから

find -not -iname "*.txt"

または

ls | grep -v '\.txt$' | column

うまくいくようです。しかし、どのように除外してリストできますか?。 txt文書または .pdf文書?findorの中にある種の論理的な「or」を使用しなければならないようですgrep

答え1

GNUを仮定すると、lsこれがおそらく最も簡単な方法です。

ls -I "*.txt" -I "*.pdf"

すべてのサブディレクトリを繰り返すには、次の手順を実行します。

ls -I "*.txt" -I "*.pdf" -R

答え2

サポートを探す-o

find . ! '(' -name '*.txt' -o -name '*.pdf' ')'

正しい優先順位を確保するには、括弧が必要です。 Findは多くのことができます。マンページを読むことをお勧めします。

またはinを実行することもできますgrep(しかし実際には出力を解析しないでください。ls)

ls | grep -Ev '\.(txt|pdf)$' | column

答え3

bash拡張ワイルドカード(openを使用shopt -s extglob)を使用すると、ワイルドカードが!(*.txt|*.pdf)機能します。 ls.

答え4

find /path/to/directory '!' -name '*.pdf' '!' -name '*.txt'

これは、OR演算子を使用したコマンドと同じです。ドモーガンの法則

関連情報