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).