¿Cómo puedo mover una carpeta específica si hay un archivo con el mismo nombre en el script bash?

¿Cómo puedo mover una carpeta específica si hay un archivo con el mismo nombre en el script bash?

Estoy intentando escribir un script de shell que encuentre un archivo específico y lo mueva a una carpeta.

    #!/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

Pero también mueve archivos si hay un archivo igual a la carpeta que busco.

Todo lo que quiero es sólo mover la carpeta.

Respuesta1

Me está costando incluso leer este guión. ¿Puedo sugerirle que lo reescriba un poco?

#!/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

Qué he hecho:

  • Utilice nombres descriptivos como destinationFileNameen lugar detext2
  • Sangrar correctamente
  • Haga que findsolo busque directorios especificando -type d. Si desea mover sólo archivos, utilice -type fen lugar de -type d.
  • Mueva la redirección al final de un comando ya que no es importante
  • Deténgase finddespués de encontrar el primer archivo ( -quit)
  • Elimine lo superfluo *en el findcomando; no estoy seguro de qué desea tener allí. Si deseaba que los nombres de archivos tuvieran comodines (por ejemplo, la búsqueda foodevolvería foobar), entonces debe colocar el comodínenlas comillas, es decir "$sourceFileName*".
  • Compruebe si se encontró algún archivo con -zla prueba si el resultado está vacío.
  • Protéjase mvcontra nombres de archivos que comiencen -usando la opción de fin de opciones--
  • Cita los argumentos correctamente para evitar que los espacios en blanco rompan el comando (no es necesario cambiarlos IFSentonces)

información relacionada