filtrando a saída de um comando recursivo

-1

Estou tentando encontrar um comando shell que retorne os nomes dos arquivos que contêm outros arquivos com o mesmo nome que os deles em um determinado diretório

    
por NSH 20.04.2017 / 09:02

1 resposta

1

O que você parece estar pedindo é um comando que encontre arquivos cujo nome seja o mesmo do diretório pai.

Você pode fazer isso usando o GNU find , com uma correspondência de expressão regular que usa uma referência anterior ao componente de caminho anterior, por exemplo,

find path/to/somedir -regextype egrep -regex '.*/([^/]*)/$'

Se você deseja encontrar especificamente arquivos que correspondam ao pai (excluindo diretórios ), você pode adicionar -type f à lista de predicados (ou se quiser para somente encontrar subdiretórios, use -type d ).

Para ilustrar, dado

$ tree
.
├── bar
│   ├── file1
│   ├── file2
│   └── file3
├── baz
│   ├── baz
│   ├── file1
│   ├── file2
│   └── file3
└── foo
    ├── file1
    ├── file2
    └── file3

3 directories, 10 files

então

$ find . -regextype egrep -regex '.*/([^/]*)/$'
./baz/baz

Se quiser imprimir apenas o nome (em vez do caminho completo), você pode usar um -printf

find . -regextype egrep -regex '.*/([^/]*)/$' -printf '%f\n'
    
por steeldriver 20.04.2017 / 14:27