Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Portada » Foros Linux » Administración del sistema » Sistema


Nuevo tema Responder al tema
 [ 4 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Vie May 21, 2010 10:43 am
Mensajes: 2

Nota Publicado: Vie May 21, 2010 10:45 am 
Arriba  
Hola a todos, este es mi primer mensaje en este foro.

Tengo que realizar una tarea que estoy casi seguro de
que podría hacer de forma automática pero no doy con el comando
adecuado.

Tengo una serie de directorios con esta estructura:

./dir/xxx/yyy/Maildir/

Hay unos 30 xxx distintos con unos 100 yyy dentro de cada uno (de ahí que busque algo automático y no tener que ir pasando a mano por todos los directorios.

Dentro de Maildir hay tres directorios: cur, new y tmp que necesito
vaciar (sin borrar el directorio en si mismo)

Estoy tratando de hacerlo con find, mediante su parámetro -exec, pero
no se porqué, el rm me da un fallo, como si no existiera la ruta que
find le pasa, pero el caso es que la ruta está bien... no entiendo qué
está fallando.

Ejecuto:

find ./dir -type d -name "new" -exec rm {}/* \;

Y me sale este error para cada resultado de find:

rm: cannot lstat './dir/xxx/yyy/Maildir/new/*': No such file or
directory

El caso es que si ejecuto:

rm ./dir/xxx/yyy/Maildir/new/*

sí, que me vacía el directorio.

¿alguien puede ayudarme? Me tiene loco este tema...

 Perfil  

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Lun May 10, 2010 1:00 am
Mensajes: 53
Ubicación: Andalucía

Nota Publicado: Vie May 21, 2010 12:27 pm 
Arriba  
Hola.
Prueba a quitar el asterisco (y asegúrate de que no se borra el directorio, que no estoy seguro, sólo lo he probado con ls :D ).

find ./dir -type d -name "new" -exec rm {}/ \;

Saludos.

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Vie May 21, 2010 10:43 am
Mensajes: 2

Nota Publicado: Vie May 21, 2010 1:27 pm 
Arriba  
No funciona, rm no borra directorios.

He encontrado una forma alternativa:

find /dir –type d –name “new” –exec find {} –type f \; | xargs rm

Con el primer find obtenemos todas las rutas de los directorios "new" y sobre cada una ellas hacemos un nuevo find para localizar todos los ficheros que hay en cada directorio y los pasamos a rm mediante una tubería y el comando xargs.

Mi idea original era usar un segundo -exec en el segundo find con rm, pero me da unos errores, así que como con xargs me ha funcionado no me he mareado más.

Gracias shicefgo

Editado -- Vie May 21, 2010 5:03 am --

La solución comentada tiene un problema: Las rutas que contienen espacios no le llegan bien a rm.

xargs considera el fin de un parámetro cuando encuentra un espacio, por lo que si la ruta es /dir/ruta uno/cur, xargs hará que se ejecute:

rm /dir/ruta
rm uno/cur

Supongo que habrá alguna forma de arreglar esto, pero mientras la encuentro lo aviso por si alguien más quiere hacer lo mismo, que lo tenga en cuenta.

Editado -- Vie May 21, 2010 5:27 am --

Ya está, este creo que sirve:

find /dir –type d –name “new” –exec find {} –type f -print0 \; | xargs --null rm

Añadiendo el -print0 al segundo find, hacemos que el resultado lleve un caracter null al final de la cadena
Añadiendo --null a xargs, hacemos que el final de una cadena se considere el caracter null y no un espacio en blanco.

 Perfil  

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Lun May 10, 2010 1:00 am
Mensajes: 53
Ubicación: Andalucía

Nota Publicado: Vie May 21, 2010 2:09 pm 
Arriba  
psk escribió:
No funciona, rm no borra directorios.

Joer, qué fallo. ::lol::

Sólo hice la prueba con ls y funcionaba, no quise entretenerme en crear directorios y meter archivos para borrar.
Me alegro de que lo hayas conseguido. Con tu permiso, me lo anoto. :wink:

Saludos.

 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 4 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


 Temas relacionados   Autor   Respuestas   Vistas   Último mensaje 
Borrar muchos ficheros con el mismo nombre

en Sistema

linvix

3

579

Mar Oct 12, 2010 8:48 pm

mcun Ver último mensaje

Como compilar usando distintos ficheros gcc?

en Programación

isakishi

1

892

Sab Oct 08, 2011 6:57 pm

hipersayan_x Ver último mensaje

crear una carpeta en multiples directorios- script bash - SOLUCIONADO -

en Programación

es175ed

14

11169

Mar Ago 07, 2012 3:24 pm

es175ed Ver último mensaje

ejercicio listados de ficheros en los directorios personales /home

en Programación

janacor

0

253

Mié Jul 04, 2018 5:37 pm

janacor Ver último mensaje

Comando que mueste tdoso los dispositivos conectados con su nombre(/dev/?)

en Hardware

Firewall27

3

1258

Dom Feb 07, 2010 11:28 pm

Firewall27 Ver último mensaje



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC + 1 hora [ DST ]
Traducción al español por Huan Manwë
phpBB SEO