Hilfe zum Unix-Befehl „find“

Hilfe zum Unix-Befehl „find“

Hallo, kann mir jemand mit der folgenden Zeile helfen;

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

Grundsätzlich sollte es Verzeichnisse finden, in denen Dateien mit „Log“ im Namen vorhanden sind.

Ich habe eine Struktur wie diese:

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

Wenn ich diese Zeile im Verzeichnis /logs ausführe, sollte ich die folgenden Ergebnisse erhalten:

.
./folder1
./folder2

Insgesamt 3 Verzeichnisse.

Antwort1

Das klingt vielleicht etwas ungewöhnlich, aber basierend auf der obigen Beschreibung sollte das Folgende genau das bewirken, was Sie möchten:

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

Antwort2

find . -name *.Log -print 

Dadurch wird der vollständige Pfad aller Dateien zurückgegeben, deren Name mit „Log“ endet.

Antwort3

finden . ( -type d ! -name . -prune ) -o -type d -name "Protokoll"

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$

Antwort4

Wenn Sie GNU find haben (wie Linux und viele andere moderne Unix-Versionen), können Sie einfach den tollen printf-Operator verwenden und Folgendes tun:

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

Sie möchten das wahrscheinlich auch durch ein sort -u(oder durch sort | uniq, je nachdem, was angebracht ist) leiten. Beachten Sie, dass einige kommerzielle UNIX-Implementierungen das als gfind installiert haben (oder über ein Paket verfügen, das es als solches installiert).

verwandte Informationen