Unix - Mover varios archivos que tenga una condición.

   
Vista:

Mover varios archivos que tenga una condición.

Publicado por Marco N (3 intervenciones) el 25/05/2010 13:01:55
Hola saludos a todos, espero detallar bien mi consulta y que alguien me pueda ayudar con lo siguiente.

La consulta es:
Por día genero aproximadamente 2000 archivos los cuales quedan en un directorio X lo que necesito es mover del directorio X todos los archivos que cumplan una condición por ejemplo sean del 05 de abril, estos archivos moverlos al directorio Z

Para esto genere el siguiente script
for file in `ls -ltr|grep -E "Apr 05"`;do mv $file /directorio Z/;done

El script cumple su función de mover los archivos. El inconveniente es que arroja el mensaje que mas abajo se indica.

mv: Not a recognized flag: r
Usage: mv [-I] [-i | -f] [-E{force|ignore|warn}] [--] src target
or: mv [-I] [-i | -f] [-E{force|ignore|warn}] [--] src1 ... srcN directory
mv: 0653-401 Cannot rename 1 to /usr1_new/data/outgoing//1:
A file or directory in the path name does not exist.
mv: 0653-401 Cannot rename orbit to /usr1_new/data/outgoing//orbit:
A file or directory in the path name does not exist.
mv: 0653-401 Cannot rename osgrp1 to /usr1_new/data/outgoing//osgrp1:
A file or directory in the path name does not exist.
mv: 0653-401 Cannot rename 91 to /usr1_new/data/outgoing//91:
A file or directory in the path name does not exist.
mv: 0653-401 Cannot rename Apr to /usr1_new/data/outgoing//Apr:
A file or directory in the path name does not exist.
mv: 0653-401 Cannot rename 05 to /usr1_new/data/outgoing//05:
A file or directory in the path name does not exist.
mv: 0653-401 Cannot rename 23:12 to /usr1_new/data/outgoing//23:12:
A file or directory in the path name does not exist.

Ya que al realizar un ls -ltr dentro del script el comando mv esta también tomando los datos de los permisos, el usuario, la hora, etc. Y quiere realizar una ejecución con esos datos.

La consulta es, de que forma puedo evitar esto, lo quiero evitar por algo estético, lo solicitado que es mover los archivos funciona, como soy el único que usa este script me da igual que arroje estos mensaje, pero si se puede mejorar porque no hacerlo, o si alguien tiene un mejor script y lo pueda compartir se lo agradecería.

Atte.
Marco N.
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
información
Otras secciones de LWP con contenido de Unix
- Cursos de Unix
- Temas de Unix
- Chat de Unix
información
Cursos y Temas de Unix
- Tutorial de Unix
- Como crear un RPM
- Introducción a Unix

RE:Mover varios archivos que tenga una condición.

Publicado por Tom (177 intervenciones) el 27/05/2010 10:23:04
Parsear la salida de un ls siempre es un poco engorroso.

Yo usaría la opción -mtime del comando find, aunque la filosofía es distinta: en vez de mover los archivos de un día determinado, moverías los archivos con una antigüedad de n días (si lo haces todos los días, el resultado es el que quieres).

Si hoy es día 12 de abril, y quieres mover los del día 5 de abril (y anteriores) harías:

for file in `find . -mtime -7`
do
mv ...
done
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

RE:Mover varios archivos que tenga una condición.

Publicado por Marco N (3 intervenciones) el 27/05/2010 23:57:55
Gracias por la respuesta, el unico problema es que no discrimina la fecha dada.

tengo los siguientes archivos

primero Abr 20
segundo Abr 21
tercero Abr 23

al ejecutar el comando `find . -mtime -7` "fecha de hoy 27 Mayo" para poder mover el archivo "primero del 20 de Abril", debiera colocar -37 al hacer esto mueve todos los archivos que se encuentren en la carpeta.
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

Mover varios archivos que tenga una condición.

Publicado por unixtricks (5 intervenciones) el 19/05/2015 16:39:14
Hola Marco,

Para no agregarle mucha complejidad a tu script yo que vos agregaría una cosa más.

Para esto genere el siguiente script

for file in `ls -ltr|grep -E "Apr 05"`;do mv $file /directorio Z/;done

Acá yo agregaría el comando AWK que básicamente este tipo te trae solo los datos de la columna necesaria en este caso a vos solo te interesa la última columna que tiene el nombre de los file a mover.

for file in `ls -ltr|grep -E "Apr 05"| awk '{ print $10 }' `;do mv $file /directorio Z/;done --> en la posición 10 esta el nombre de tu file.

Saludos,
unixtricks
http://unixcommands.esy.es/
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

Mover varios archivos que tenga una condición.

Publicado por Xurxo FV xurxo@xares.jazztel.es (1 intervención) el 19/11/2015 13:22:41
Saludos.

Mi solución por si aún la necesitas

1
for file in `grep -lir "Apr 05"` ; do mv $file /directorio/Z ; done
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