Localiza arquivos no diretório com nomes pareados

4

Estou executando testes de um conjunto de testes de tamanho variável e conteúdo. Arquivos de dados são adicionados e removidos com freqüência. Estou procurando uma maneira automatizada de reunir uma lista de arquivos.

Todos os arquivos estão em subdiretórios de D ; Eu preciso do diretório completo e nome adicionado a um arquivo de texto. No entanto, eu só preciso desses arquivos que têm um arquivo "emparelhado", que tem o mesmo nome de arquivo, mas uma extensão diferente (assim ... nome de arquivo diferente, mas de forma estruturada). Portanto, se houver um MyFileName.A e MyFileName.B , quero D/.../MyFileName adicionado à lista de arquivos.

Existem .A arquivos sem .B arquivos, mas não .B arquivos sem .A arquivos. Se um .A tiver um arquivo .B , ambos os arquivos estarão no mesmo diretório.

Algum conselho?

    
por Gaminic 16.06.2014 / 13:41

3 respostas

4

Se nenhum dos nomes de arquivo contiver novas linhas, você pode fazer:

find D -type f \( -name '*.A' -o -name '*.B' \) |
  sed 's/\.[^.]*$//' |
  sort |
  uniq -d >paired_files

Isso deve funcionar no caso mais geral, em que há .B arquivos sem .A arquivos.

Para lidar com qualquer nome de arquivo usando ferramentas GNU recentes:

find D -type f \( -name '*.A' -o -name '*.B' \) -print0 |
  sed -z 's/\.[^.]*$//' |
  sort -z |
  uniq -dz |
  tr '
find D -type f \( -name '*.A' -o -name '*.B' \) |
  sed 's/\.[^.]*$//' |
  sort |
  uniq -d >paired_files
' '\n' >paired_files
    
por 16.06.2014 / 13:57
5

Se a afirmação for verdadeira “não há arquivos .B sem arquivos .A.”, obtenha uma lista de arquivos .B e remova a extensão.

find $directory-to-search -name "*.B" | sed -r -e "s~(.*)\.B~~g"
    
por 16.06.2014 / 13:48
1

com zsh :

print -rl mydir/**/*.A(.e_'REPLY=$REPLY:r; [[ -f $REPLY.B ]]'_)

:r remove a extensão, portanto, se o conteúdo de $REPLY for mydir/somedir/somefile.A depois de executar REPLY=$REPLY:r , seu conteúdo se tornará mydir/somedir/somefile ;
o resto é semelhante a esta resposta .

    
por 13.04.2017 / 14:36