Localiza um arquivo com a extensão .csv em um diretório correspondente a um padrão

1

Eu tenho uma pasta na qual tenho muitas subpastas.

O nome da pasta raiz é allCSV e o nome da subpasta é como a_date(s), b_date(s), c_date(s) ...

Eu quero um arquivo que esteja em a_date (s) e termine com .csv .

Eu tentei com:

find ../ -name '[a_]*' -a -name '*[.csv]'

Mas está mostrando todos os arquivos terminados em .csv

    
por VP7 25.05.2015 / 08:59

3 respostas

3

O padrão [a_]* corresponde a nomes que começam com um dos caracteres a ou _ . O padrão *[.csv] corresponde nomes que terminam com um dos caracteres . , c , s ou v . Para corresponder nomes que começam com a_ , use -name 'a_*' . Para corresponder nomes que terminam com .csv , use -name '*.csv' .

find ../ -name 'a_*' -a -name '*.csv' ou equivalentemente find ../ -name 'a_*.csv' corresponde a arquivos cujo nome começa com a_ e termina com .csv . Isso não filtra nos diretórios percorridos para alcançar o arquivo.

Se os arquivos estiverem em subdiretórios do diretório pai (por exemplo, ../a_foo/wibble.csv ), você não precisará do find : o comando find será útil somente para pesquisar árvores de diretórios de forma recursiva. Você pode usar echo ou ls :

ls ../a_*/*.csv

Se os arquivos puderem estar em subdiretórios abaixo dos diretórios a_* (por exemplo, ../a_foo/wibble.csv ou ../a_foo/bar/wibble.csv mas não ../qux/a_foo/wibble.csv ), chame find e peça para pesquisar os diretórios a_* .

find ../a_* -name '*.csv'

Como alternativa, em vez de usar find , você pode usar o ** curinga para pesquisar em subdiretórios recursivamente. No ksh93, você precisa habilitar esse padrão com set -o globstar primeiro. No bash, você precisa ativar esse padrão com shopt -s globstar primeiro. Em zsh, esse padrão é ativado por padrão. Outras shells como sh simples não possuem ** .

ls ../a_*/**/*.csv

Se os diretórios a_* puderem estar em qualquer profundidade abaixo do diretório pai, você poderá usar find -path ou ** :

find .. -path '*/a_*/*.csv'
ls ../**/a_*/**/*.csv
    
por 26.05.2015 / 02:20
1

Existem muitas maneiras de fazer isso. Se você quiser apenas listar os arquivos, você pode usar ls :

ls a_date\(s\)/*csv

Ou com find :

find .. -path '*a_date*/*csv' 
find ../allCSVs/a_date\(s\)/ -name '*csv'
    
por 25.05.2015 / 14:26
0

Você pode usar o Recoll que ajuda a pesquisar qualquer tipo de documento e também restringir sua pesquisa a uma determinada pasta, conforme mostrado abaixo .

Pesquisa simples

Pesquisaavançada(pararestringirapesquisaaumapastaespecífica)

    
por 25.05.2015 / 11:12