Encontre recursivamente todos os arquivos das subpastas e crie links simbólicos para eles com o nome da pasta que os contém

0

Espero que isso seja possível, gostaria de verificar todos os arquivos nas subpastas de

/home/user/source/

e crie links simbólicos para esses arquivos em uma pasta diferente com uma extensão de arquivo diferente. Então eu começo com essa estrutura de pastas:

/home/user/source/folder1/random_file_name.bin
/home/user/source/folder2/random_file_name.bin
/home/user/source/folder3/random_file_name.bin
...

Eu gostaria de criar links simbólicos para os arquivos bin como:

/home/user/dest/folder1.txt -> /home/user/source/folder1/random_file_name.bin
/home/user/dest/folder2.txt -> /home/user/source/folder2/random_file_name.bin
/home/user/dest/folder3.txt -> /home/user/source/folder3/random_file_name.bin
...

Posso fazer isso em apenas um loop ou devo verificar cada pasta de "origem" para extrair o nome da pasta e, em seguida, fazer um loop em cada pasta para encontrar o arquivo bin em cada pasta? Há apenas um arquivo bin por pasta, com um nome aleatório pelo caminho.

A menos que haja uma maneira de fazer isso com o comando "find"?

    
por NaturalBornCamper 17.09.2017 / 16:03

1 resposta

1
for d in $(find source -type d); do ls $d/*.bin 1>/dev/null 2>&1 && ln -s $d/*.bin target/$(basename $d).dat;done

Em câmera lenta:

  • Verificar os diretórios
  • se o diretório contiver pelo menos um arquivo .bin
  • vincule o arquivo bin usando o nome do diretório
por 17.09.2017 / 19:41