ActionScript - Bash Script

 
Vista:
sin imagen de perfil

Bash Script

Publicado por Pablo (1 intervención) el 03/10/2016 03:24:34
Hola, tengo que crear tres scripts; el primero que reciba dos parámetros. El primer parámetro es el path de un archivo de texto, dicho archivo contiene una serie de rutas. Como segundo parámetro la ruta de un directorio fuente donde buscar los archivos definidos en el primer parámetro. Al finalizar la ejecución los archivos del directorio fuente deberán moverse al destino definido en el archivo pasado como primer parámetro.

Ejemplo

home/usuario/mp3/music.mp3
home/usuario/txt/tp.txt
home/usuario/jpg/foto.jpg

Los archivos que se deberán buscar en la carpeta fuentes son music.mp3 , tp.txt y foto.jpg. El destino de cada uno de ellos es la ruta definida en el archivo pasado por parámetro.
El Segundo es basicamente el mismo script pero modificandolo para validar que el primer parámetro sea un archivo y el segundo sea un directorio. De no ser correcto deberá retornar un error a través de una función error. Generar un archivo ejecución.log que guarde los eventos que sucedieron dentro del script.
y el Ultimo es igual al anterior pero tengo que modificarlo para que organice los archivos de un directorio fuente en diferentes carpetas según el tipo de archivo
lo que yo hice fue lo siguiente, en el primero :

1
2
3
4
5
6
7
8
9
10
#! /bin/bash
 
read -p"Introduzca el Archivo con las Rutas de Destino:  " rutas
read -p"Introduzca la Ruta del Directorio fuente: " fuente
 
for LINEA in 'cat $rutas'
do
	NOMBRE='echo $LINEA ! cut-d"/"-f4' #Extraigo el nombre del archivo
	find /$busqueda -iname "$NOMBRE" -exec mv {} $archivo \; #Busco el archivo, y lo muevo.
done

Pero por alguna razon, me dice que tiene permisos denegados, aunque yo le modifique los permisos dandole absoluto control de todo. chmod 7777 a todo... carpetas y subcarpetas y arhcivos..todo...

en el segundo hice esto:

1
2
3
4
5
6
7
8
9
10
#! /bin/bash
 
read -p"Introduzca La Ruta del Archivo que desea Mover:  " mover
read -p"Introduzca la Ruta del Directorio don desea moverlo: " dejar
 
for archivo in " $mover"
do
	/bin/chmod R+ 7777 $archivo
	/bin/mv $archivo $dejar
done


pero no funciona.

y en el ultimo:

1
2
3
4
5
6
7
8
9
10
11
12
13
#! /bin/bash
 
read -p"Introduzca La Ruta del Archivo que desea Mover:  " archivo
#destino=read -p"Introduzca la Ruta del Directorio don desea moverlo: "
 
dirjpg="/home/pxp/Escritorio/TP/jpg"
dirmp3="/home/pxp/Escritorio/TP/mp3"
dirtxt="home/pxp/Escritorio/TP/txt"
 
 
find $archivo -name *.mp3 - exec mv $dirmp3
find $archivo -name *.jpg - exec mv $dirjpg
find $archivo -name *.txt - exec mv $dirtxt

pero tampoco funciona...las carpetas ya estan creadas con anterioridad...

si alguien sabe de como solucionar mis scripts se los agradeceria...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Código para mover archivos según rutas especificadas en un archivo de texto

Publicado por Alejandro (369 intervenciones) el 28/06/2023 22:55:29
Hola, Pablo.

En los scripts que has proporcionado, veo algunos problemas que podrían estar causando los errores que mencionas. Aquí te brindo algunas correcciones y sugerencias:

Primer Script:
1
2
3
4
5
6
7
8
9
#! /bin/bash
 
read -p "Introduzca el Archivo con las Rutas de Destino: " rutas
read -p "Introduzca la Ruta del Directorio fuente: " fuente
 
while IFS= read -r linea || [[ -n "$linea" ]]; do
    nombre=$(basename "$linea") # Extraigo el nombre del archivo
    find "$fuente" -type f -name "$nombre" -exec mv {} "$linea" \; # Busco el archivo y lo muevo
done < "$rutas"

Correcciones realizadas:
- El uso de comillas simples en `for LINEA in 'cat $rutas'` estaba causando que se tratara la salida del comando `cat` como una sola cadena. Cambié las comillas simples por el uso de `read` para leer línea por línea.
- Cambié `NOMBRE='echo $LINEA ! cut-d"/"-f4'` por `nombre=$(basename "$linea")` para obtener el nombre del archivo de forma más efectiva.
- Cambié `/ $busqueda` por `"$fuente"` en `find "$fuente" -iname "$NOMBRE" -exec mv {} $archivo \;` para usar la variable correcta.

Segundo Script:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#! /bin/bash
 
read -p "Introduzca La Ruta del Archivo que desea Mover: " mover
read -p "Introduzca la Ruta del Directorio donde desea moverlo: " dejar
 
if [ ! -f "$mover" ]; then
    echo "Error: El primer parámetro no es un archivo válido."
    exit 1
fi
 
if [ ! -d "$dejar" ]; then
    echo "Error: El segundo parámetro no es un directorio válido."
    exit 1
fi
 
/bin/chmod 777 "$mover"
/bin/mv "$mover" "$dejar"

Correcciones realizadas:
- Agregué verificaciones para asegurarme de que el primer parámetro sea un archivo válido y el segundo parámetro sea un directorio válido antes de continuar con el proceso.
- Cambié `/bin/chmod R+ 7777 $archivo` por `/bin/chmod 777 "$mover"` para cambiar los permisos del archivo de manera correcta.
- Cambié `/bin/mv $archivo $dejar` por `/bin/mv "$mover" "$dejar"` para mover el archivo correctamente.

Tercer Script:
1
2
3
4
5
6
7
8
9
10
11
#! /bin/bash
 
read -p "Introduzca La Ruta del Directorio fuente: " directorio
 
dirjpg="/home/pxp/Escritorio/TP/jpg"
dirmp3="/home/pxp/Escritorio/TP/mp3"
dirtxt="/home/pxp/Escritorio/TP/txt"
 
find "$directorio" -type f -name "*.mp3" -exec mv {} "$dirmp3" \;
find "$directorio" -type f -name "*.jpg" -exec mv {} "$dirjpg" \;
find "$directorio" -type f -name "*.txt" -exec mv {} "$dirtxt" \;

Correcciones realizadas:
- Cambié `find $archivo -name *.mp3 - exec mv $dirmp3` por `find "$directorio" -type f -name "*.mp3" -exec mv {} "$dirmp3" \;` para buscar los archivos mp3 y moverlos a la carpeta correspondiente. Realicé cambios similares para las otras extensiones.

Asegúrate de otorgar los permisos adecuados a los archivos y directorios que estás utilizando en tus scripts, de modo que el usuario que ejecuta los scripts tenga permisos suficientes para leer, escribir y mover los archivos y directorios involucrados.

Espero que estas correcciones te sean útiles.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar