Olá, alguém pode me ajudar com a seguinte linha;
find . \( -type d ! -name . -prune \) -o -type f -name "*Log*"
Basicamente ele deve encontrar diretórios onde estejam presentes arquivos com "Log" no nome.
Eu tenho uma estrutura assim:
/logs
|
|
----folder1
| |
| |
| ---App1LogDate.txt
|
----folder2
| |
| |
| ---App2LogDate.txt
|
|
|--App3LogDate.txt
|
|--App4LogDate.txt
Considerando que executarei esta linha no diretório /logs, devo obter os seguintes resultados:
.
./folder1
./folder2
3 diretórios no total.
Responder1
Campo ligeiramente à esquerda, mas com base na descrição acima, o seguinte deve fazer exatamente o que você deseja:
find . -type f -name "*Log*" -print | sed -E 's/\/[^\/]+$//' | sort | uniq
Responder2
find . -name *.Log -print
Isso fornecerá o caminho completo de todos os arquivos cujo nome termina com Log .
Responder3
encontrar . ( -type d ! -name . -prune ) -o -type d -name "Registro"
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$
Responder4
Se você possui o GNU find (como o Linux e muitos outros Unixes modernos fazem), você pode simplesmente usar o incrível operador printf e fazer o seguinte:
find -type f -name '*Log*' -printf '%h\n'
Você provavelmente também deseja canalizar isso através de a sort -u
(ou through sort | uniq
, conforme apropriado). Observe que algumas implementações comerciais do UNIX o terão instalado como gfind (ou terão um pacote que o instala como tal).