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

0

Estou tentando escrever um script de shell que encontre um arquivo específico e mova-o 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 eu pesquiso. Tudo que eu quero é apenas mover a pasta.

Obrigado antecipadamente.

    
por user3888890 29.07.2014 / 22:00

1 resposta

1

Estou tendo dificuldades para ler este roteiro. 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 destinationFileName em vez de text2
  • Recuar corretamente
  • Torne find apenas encontrar diretórios especificando -type d . Se você deseja mover somente arquivos, use -type f em vez de -type d .
  • Mover o redirecionamento para o final de um comando, pois não é importante
  • Pare find depois de encontrar o primeiro arquivo ( -quit )
  • Remova o * supérfluo no comando find - não tenho certeza do que você gostaria com ele. Se você quisesse que os nomes dos arquivos tivessem curingas (por exemplo, a pesquisa por foo retornaria foobar ), seria necessário colocar o curinga nas aspas, ou seja, "$sourceFileName*" .
  • Verifique se um arquivo foi encontrado com -z testing, se o resultado estiver vazio.
  • Proteja mv dos nomes de arquivos que começam com - usando a opção de final de opções --
  • Cite argumentos adequadamente para evitar que o espaço em branco interrompa o comando (não é necessário alterar IFS )
por 29.07.2014 / 22:08

Tags