1. ホーム
  2. linux

[解決済み] findコマンドを使用するが、2つのディレクトリのファイルを除外する。

2022-12-06 15:38:03

質問

で終わるファイルを探したい。 _peaks.bed で終わるファイルを見つけたいのですが tmpscripts フォルダーに格納されます。

私のコマンドはこのようなものです。

 find . -type f \( -name "*_peaks.bed" ! -name "*tmp*" ! -name "*scripts*" \)

しかし、うまくいかなかった。のファイルは tmpscript のフォルダは表示されたままです。

どなたか、これについてのアイデアをお持ちの方はいらっしゃいませんか?

どのように解決するのですか?

ここでは、それを指定する方法として find :

find . -type f -name "*_peaks.bed" ! -path "./tmp/*" ! -path "./scripts/*"

説明

  • find . - 現在の作業ディレクトリから検索を開始する (デフォルトでは再帰的に)
  • -type f - に指定する。 find に、結果にファイルだけが含まれるように
  • -name "*_peaks.bed" - で終わる名前のファイルを探します。 _peaks.bed
  • ! -path "./tmp/*" - パスが ./tmp/
  • ! -path "./scripts/*" - また、パスが ./scripts/

ソリューションのテスト。

$ mkdir a b c d e
$ touch a/1 b/2 c/3 d/4 e/5 e/a e/b
$ find . -type f ! -path "./a/*" ! -path "./b/*"

./d/4
./c/3
./e/a
./e/b
./e/5

かなり惜しかったですね、その -name オプションはベースネームのみを考慮します。 -path はパス全体を考慮します =)