find /Year/ -name '*.nc' | sed -e 's:/[^/]*$:/:' | sort -u
Fornecerá a lista de diretórios que contém pelo menos um arquivo cujo nome corresponde a '* .nc'
Eu tenho vários arquivos salvos como
Year -> Month -> Day -> bunch of .nc files
Eu gostaria de gerar uma lista de todos os diretórios que contêm os arquivos nc. Eu posso listar o caminho de cada arquivo nc com:
find /Year/ -name *.nc | sort > directory_list.txt
que localiza cada arquivo .nc nos subdiretórios dessas pastas neste arquivo principal. Esses resultados são salvos em um arquivo de texto 'directory_lists'.
/2000/01/01/nc_file1.nc
/2000/01/01/nc_file2.nc
/2000/01/01/nc_file3.nc
/2000/01/02/nc_file3.nc
/2000/01/03/nc_file3.nc
e assim por diante ... Como é possível modificar ligeiramente isso para que eu tenha uma lista de cada diretório 'Day'? Isso seria semelhante aos resultados obtidos com o comando acima, mas sem as informações sobre o arquivo nc incluído.
Eu tentei:
find /Year/ | sort > directory_list.txt
mas isso retorna cada caminho
/Year/
/Year/Month
/Year/Month/Day
Eu gostaria que o resultado fosse:
/2000/01/01/
/2000/01/02/
/2000/01/03/
e assim por diante ... sem o nome do diretório sendo repetido
Eu acho que isso é o mesmo que tentar obter o diretório da pasta de terceiro nível dentro do diretório Year? Qualquer conselho seria apreciado.
egrep '/[^/]+/[^/]+/' directory_list.txt
Isso fornece todas as linhas que contêm exatamente 3 /
, que é a profundidade do diretório que você deseja.
Tags command-line find files