Identificar de qual diretório um nome de arquivo vem

1

Eu tenho uma lista de nomes de arquivos .txt que vem de dois diretórios diferentes. Eles vêm de um banco de dados do servidor e compartilham uma única característica (sinalizador de banco de dados), mas eu realmente preciso saber de qual dos dois diretórios eles vêm.

Existe uma maneira de processar em lote a lista para produzir uma nova lista que mostre de qual diretório o arquivo veio?

Eu posso fazer isso um por um usando "find", mas a lista tem cerca de 150 arquivos.

É mais rápido ler sobre consultas de banco de dados e refazer a lista?

    
por Tim Vincent 11.04.2016 / 22:13

2 respostas

1

Se você sabe que os arquivos só podem estar em um dos dois locais, provavelmente é mais eficiente testá-los explicitamente, por exemplo

while IFS= read -r f; do 
  if [ -e "dir1/$f" ]; then
    echo "dir1/$f"
  elif [ -e "dir2/$f" ]; then
    echo "dir2/$f"
  else
    echo "$f: not found"
  fi
done < filelist
    
por steeldriver 12.04.2016 / 00:14
0

Você sempre pode usar o comando locate , que lê um banco de dados de todos os arquivos. No entanto, o banco de dados deve ser atualizado antes de executar locate .

Veja um exemplo do que se pode fazer

$ locate --regex ".*/lightdm.conf$"                                            
/etc/init/lightdm.conf
/etc/lightdm/lightdm.conf

Agora, para processar em lote uma lista de arquivos, pode-se usar while read do. . . done < input_file structure, com locate code dentro. Algo parecido com isto:

$> cat > file_list.txt                                                         
passwd
lightdm.conf
firefox.desktop

$> while read line ; do                                                        
> locate --regex ".*/$line$"                                                   
> done < file_list.txt                                                         
/etc/passwd
/etc/cron.daily/passwd
/etc/pam.d/passwd
/home/xieerqi/Desktop/cleanup/passwd
/home/xieerqi/Documents/passwd
/usr/bin/passwd
/usr/share/bash-completion/completions/passwd
/usr/share/doc/passwd
/usr/share/lintian/overrides/passwd
/etc/init/lightdm.conf
/etc/lightdm/lightdm.conf
/usr/share/applications/firefox.desktop

É claro que essa não é a mais rápida das pesquisas - afinal, o banco de dados contém milhares de arquivos, mas muito mais rápido do que percorrer todo o arquivo. estrutura de diretórios com find

    
por Sergiy Kolodyazhnyy 12.04.2016 / 00:43