Dada a seguinte estrutura de diretórios:
$ tree --noreport dir
dir
├── fileA
├── .hiddenfileA
├── .hiddendirA
| ├── .hiddenfileB
│ ├── fileC
│ └── fileD
└── dirA
├── .hiddenfileC
├── fileE
└── fileF
O requisito é fazer uma chamada para localizar para que os arquivos de diretórios ocultos, mas não os arquivos ocultos (em diretórios não ocultos), sejam excluídos do resultado.
O retorno esperado deve ser algo semelhante a:
./.hiddenfileA
./dirA/.hiddenfileC
./dirA/fileE
./dirA/fileF
./fileA
Fiz algumas pesquisas e encontrei aqui informações que me levaram a criar a seguinte chamada parafind
$ find . -type f -not -path '*/\.*' -print
Mas esta solução tem a desvantagem de pular diretórios e arquivos ocultos .
Remova os diretórios ocultos e limite os resultados aos arquivos:
Como sugerido por jthill , você pode preferir filtrar diretórios, o que resultaria na exibição de arquivos, links etc.:
O comando que você tem está muito perto de funcionar. Usar
*/.*/*
, procura por a/.
(implicando um nome de segmento que começa com.
) seguido (eventualmente) por a/
— então o nome do segmento que começa com.
não pode ser o último (o nome do arquivo); ou seja, deve ser um nome de diretório.-path
usa padrões de expansão de nome de arquivo; aka globs ou curingas. Então não precisa colocar\
antes.
.-not
se quiser portabilidade para sistemas não GNU. O uso de!
para representar “não” é especificado pelo POSIX e funciona em todas as versões defind
(mesmo BSD, Solaris, etc., e sistemas antigos).