Como posso mover uma pasta específica se houver um arquivo com o mesmo nome no script bash?

Como posso mover uma pasta específica se houver um arquivo com o mesmo nome no script bash?

Estou tentando escrever um script de shell que encontre um arquivo específico e o mova para uma pasta.

    #!/bin/sh
echo -n "/home/cosmoretro/movie/"
        read text2
while :
        do
        echo -n "Ara:"
        read text1
        b=$(find /home/cosmoretro 2>/dev/null -iname "$text1"*)
        IFS=$'\n'
    mv $b /home/cosmoretro/movie/"$text2"
done

Mas ele também move arquivos se houver um arquivo igual à pasta que procuro.

Tudo que eu quero é apenas mover a pasta.

Responder1

Estou tendo dificuldades até para ler esse script. Posso sugerir que você reescreva um pouco?

#!/bin/sh
echo -n "/home/cosmoretro/movie/"
read destinationFileName

while :
do
    echo -n "Ara:"
    read sourceFileName
    sourceFile=$(find /home/cosmoretro -type d -iname "$sourceFileName" -print -quit 2> /dev/null)
    if [[ -z $sourceFile ]]; then
        echo "No file named $sourceFileName found"
    else
        mv -- "$sourceFile" /home/cosmoretro/movie/"$destinationFileName"  
    fi
done

O que eu fiz:

  • Use nomes descritivos como destinationFileNameem vez detext2
  • Recuar corretamente
  • Faça findapenas encontrar diretórios especificando -type d. Se você quiser mover apenas arquivos, use -type fem vez de -type d.
  • Mova o redirecionamento para o final de um comando, pois não é importante
  • Pare finddepois de encontrar o primeiro arquivo ( -quit)
  • Remova o supérfluo *do findcomando - não tenho certeza do que você deseja com ele. Se você deseja que os nomes de arquivos tenham curingas (por exemplo, a pesquisa fooretornaria foobar), então você precisa colocar o curingaemas aspas, ou seja "$sourceFileName*".
  • Verifique se algum arquivo foi encontrado testando -zse o resultado estiver vazio.
  • Proteja-se mvcontra nomes de arquivos começando -usando a opção de fim de opções--
  • Cite os argumentos corretamente para evitar que os espaços em branco quebrem o comando (não há necessidade de alterar IFSentão)

informação relacionada