Unixのfindコマンドのヘルプ


0

皆さん、こんにちは。

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
あなたが言うつもりだった -type d の代わりに -type f 「or」の部分に?
glenn jackman

回答:


1

やや左フィールドですが、上記の説明に基づいて、次のようにします。

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

ああ、私たちはksh88を持っています、そしてそれは - Eはうまくいきません、何かアドバイスは?
Dima

やってみる find . -type f -name "*Log*" -print | awk 'BEGIN { FS="/"; OFS="/"; } { $NF = ""; print; }' | sort | uniq

0
find . -name *.Log -print 

これは名前がLogで終わるすべてのファイルのフルパスを与えます。


そのようなファイルが存在するディレクトリだけが必要です
Dima

1
find . -type f -name '*.Log' -print | sed 's,/[^/]*$,,' | sort -u
Keith Thompson

美しさ!魅力のように働きます。

0

見つけます。 (-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$

現在のディレクトリがありません
Dima

0

もしあなたがGNU(Linuxや他の多くの最近のUnixがそうであるように)を見つけたなら、あなたはただ素晴らしいprintf演算子を使用してこれをすることができる:

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.