Digitar diretórios onde os nomes correspondem em uma substring

1

Eu quero entrar em vários diretórios em um loop for. Eu não tenho o nome completo dos diretórios, apenas uma parte dele.

Eu gostaria de fazer algo parecido com o que você escreveria no terminal, algo como cd *IncompleteDirName*

Este é um MVE do loop: IncompleteDirName são obtidos do arquivo IncompleteDirNames .

cont=1
sum=1
while read anotherFILE; do

        IncompleteDirName=$(sed "${cont}q;d" IncompleteDirNames)

        cd *"${IncompleteDirName}"*
        #  Do stuff
        cd ..
        cont=$((cont + sum))
done <anotherFILE

Isso não está funcionando, não sei se isso tem a ver com o curinga não estar expandindo ou com a variável não funcionando corretamente.

Está me jogando essa mensagem de erro:

*: No such file or directory

Suponho que isso signifique que o asterisco não está funcionando como esperado. Não está entrando nos diretórios e existe um diretório que corresponde a todos os padrões. De qualquer forma, nenhum diretório está sendo inserido.

É assim que o arquivo IncompleteDirNames se parece:

Alicante
Almeria 
Andalucia 
Avila

É uma coluna de nomes. Estes são os nomes dos diretórios correspondentes ao IncompleteDirName s acima:

aa4fas_Alicante_com
mun_Almeria
comunidadde_Andalucia
ciuAvila
    
por D1X 25.03.2017 / 22:08

1 resposta

1

Essa parte do script definitivamente funciona, o que você pode descobrir facilmente executando este script de teste:

#/bin/sh
cd
IncompleteDirName="ment"
cd *"${IncompleteDirName}"*
date > testFile

A primeira linha é o shebang. A segunda linha muda para o seu diretório pessoal. Deve haver uma pasta chamada Documents . A terceira linha define a variável IncompleteDirName como substring de Documents . A quarta linha é copiada do seu script. A quinta linha grava os dados atuais no arquivo testFile na localização atual.

Você verá um arquivo testFile na sua pasta Documents .

O problema provavelmente é algo diferente em seu script, como Rakesh Sharma já apontou em sua resposta ou como você a usa. Acho que esses são cenários prováveis:

  • Existem caracteres parecidos ou iguais. Por exemplo, Α é um alfa maiúsculo, não um latino A . Se você pesquisar A nesta página e destacar todos os resultados, A será realçado, mas Α não. Da mesma forma, pode não haver uma correspondência porque o que você considera uma subcadeia do nome de um diretório não é, na verdade, uma subseqüência do nome desse diretório.
  • A capitalização é importante. Se você vem do mundo do Windows, a capitalização não importa. Você pode ter um diretório chamado A e cd a (ou qualquer que seja o equivalente do Windows) para entrar nesse diretório. No lado negativo, ter um diretório chamado A em um sistema Windows significa que você não pode ter um diretório chamado a no mesmo diretório. Em um sistema Unix, isso não se aplica. cd ~/documents provavelmente falhará em sua máquina (a menos que você tenha um diretório chamado documents em sua pasta pessoal) porque a primeira letra não está em maiúscula.

Mas, como você pode ver no meu script de exemplo, essa parte do script definitivamente funciona.

    
por 25.03.2017 / 22:32