複数のフォルダ名からファイルを探す

複数のフォルダ名からファイルを探す

このコマンドを使用するサブディレクトリの任意の場所にある可能性がある、すべてのファイルを一覧dir1表示dir2しようとします。私は成功せずに次のことを試しました。dir3dir4cwdfind

find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'

私もposix-extendedそれを試しました。このファイルをどのようにリストできますか?

答え1

foobarおよびbaz3つのフォルダ内のすべてのファイルを検索するには、*.py次のコマンドを使用します。

find foo bar baz -name "*.py"

dir1 dir2 dir3したがって、使用したファイルを表示するにはfind dir1 dir2 dir3 -type f

この試みfind . \( -name "dir1" -o -name "dir2" \) -exec ls '{}' \;

答え2

-pathディレクティブを使用する方が良いです。

find .  \( -type f -and -path '*/dir1/*' -or -path '*/dir2/*' -or -path '*/dir3/*' -or -path '*/dir4/*' \)

つまり、パスに "dir1"、"dir2"、"dir3"、または "dir4" がある現在のディレクトリ内のすべてのファイルを探します。

答え3

ただみんなに知らせよう。.*/それぞれを前に追加すると、フルパスと一致しているように見えるdirため、問題は解決しました。regex

答え4

ワイルドカード(ホームディレクトリ)と通常のapache2ログディレクトリで定義された複数の場所で特定のファイル(access_log)を見つけ、名前フィルタリングを適用してSSLログとgzipで圧縮された古いログを除外する簡単な(!)例です。これは質問に直接答えるわけではありませんが、これらのガイドラインを探している人(私のような)には便利です。

find / \( -path "*var/log/apache2*" -o -path "*home/*/logs*" \) -type f  -name "*access_log" ! -name "*ssl*"

\(スペース、特に近くのスペースに注意してください\)

しかし、私はそれをapachetopで使用して、私のサーバーで最もアクティブなウェブサイトを見つけます。

apachetop -d1 -s9 -p $(find / \( -path "*var/log/apache2*" -o -path "*home/*/logs*" \) -type f  -name "*access_log" ! -name "*ssl*" -print | sed 's/^/-f '/)

関連情報