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 detext2
- 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 comandofind
- não tenho certeza do que você gostaria com ele. Se você quisesse que os nomes dos arquivos tivessem curingas (por exemplo, a pesquisa porfoo
retornariafoobar
), 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
)