Справка по команде поиска Unix

Справка по команде поиска Unix

Привет, кто-нибудь может мне помочь со следующей строкой:

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

найти . ( -тип d ! -имя . -prune ) -o -тип d -имя "Бревно"

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 (или иметь пакет, который устанавливает это как таковой).

Связанный контент