Unix find コマンドのヘルプ

Unix find コマンドのヘルプ

こんにちは、次の行について誰か助けてくれませんか。

find . \( -type d ! -name . -prune \) -o -type f -name "*Log*"

基本的には、名前に「Log」が含まれるファイルが存在するディレクトリを見つける必要があります。

次のような構造があります:

/logs
  |
  |
  ----folder1
  |       |
  |       |
  |       ---App1LogDate.txt
  |
  ----folder2
  |      |
  |      |
  |      ---App2LogDate.txt
  |
  |
  |--App3LogDate.txt
  |
  |--App4LogDate.txt

したがって、この行を /logs ディレクトリ内で実行すると、次の結果が得られるはずです。

.
./folder1
./folder2

合計 3 つのディレクトリ。

答え1

少し変わっていますが、上記の説明に基づくと、次のようにすればまさに必要なことを実現できるはずです。

find . -type f -name "*Log*" -print | sed -E 's/\/[^\/]+$//' | sort | uniq

答え2

find . -name *.Log -print 

これにより、名前が Log で終わるすべてのファイルの完全なパスが提供されます。

答え3

検索 . ( -type d ! -name . -prune ) -o -type d -name "ログ

tmp$ ls
App3LogDate.txt  App4LogDate.txt  folder1  folder2
tmp$ ls folder*
folder1:
App1LogDate.txt

folder2:
App2LogDate.txt
tmp$ find . \( -type d ! -name . -prune \) -o -type d -name "*Log*"
./folder2
./folder1
tmp$

答え4

GNU find をお持ちの場合 (Linux や他の多くの最近の Unix に搭載されているもの)、すばらしい printf 演算子を使用して次のように実行できます。

find -type f -name '*Log*' -printf '%h\n'

おそらく、これをsort -u(またはsort | uniq必要に応じて )にパイプすることも必要になるでしょう。一部の商用 UNIX 実装では、これが gfind としてインストールされている(または、そのようにインストールするパッケージがある)ことに注意してください。

関連情報