Thread View: es.comp.os.linux.programacion
8 messages
8 total messages
Started by Javier M Mora (jamarier)
Fri, 29 Jul 2005 00:09
(Bash) borrando directorios vacios recursivamente
Author: Javier M Mora (jamarier)
Date: Fri, 29 Jul 2005 00:09
Date: Fri, 29 Jul 2005 00:09
42 lines
2414 bytes
2414 bytes
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
haciendo un scriptcillo en bash, me encuentro con un arbol de
directorios que puede tener directorios vacios.
Quiero borrar dichos directorios vacios y si al borrar un directorio su
directorio queda igualmente vacio este tambien ha de borrarse, y as�
hasta que todos los directorios que queden est�n con al menos un
fichero/directorio.
tengo varios elementos en la mano, pero no se muy bien como conjugarlos:
rmdir s�lo borra si est� vac�o, as� que como primera aproximaci�n se me
ocurri�:
find -type d -exec rmdir '{}' ';'
a parte de generar muchos errores (que se pueden eliminar usando la
opci�n: --ignore-fail-on-non-empty) no hace el proceso recursivo. De
hecho, find encuentra los ficheros de padres a hijos y no al contrario
que ser�a lo ideal.
Por otra parte, el arbol de directorios no est� limitado en su
profundidad as� que repetir el comando n veces, no valdr�a, porque no
podemos asegurar que tenga una profundidad de directorios vacios n+1.
Estoy abierto a sugerencias.
atte. javier m mora
- --
Javier Maria Mora Merchan
(GPGP) Key ID: 0x794F3D83
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
iD8DBQFC6XPApRHCj3lPPYMRAvVFAKCtzooKaiQb301xvSxg5Ckj+sILrACfe123
AmkXyoX+/pW0zSLA5Juiw74=
=6s0D
-----END PGP SIGNATURE-----
Re: (Bash) borrando directorios vacios recursivamente
Author: Carlos
Date: Fri, 29 Jul 2005 01:44
Date: Fri, 29 Jul 2005 01:44
23 lines
1599 bytes
1599 bytes
Javier M Mora (jamarier) wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> haciendo un scriptcillo en bash, me encuentro con un arbol de
> directorios que puede tener directorios vacios.
>
> Quiero borrar dichos directorios vacios y si al borrar un directorio su
> directorio queda igualmente vacio este tambien ha de borrarse, y as�
> hasta que todos los directorios que queden est�n con al menos un
> fichero/directorio.
>
> tengo varios elementos en la mano, pero no se muy bien como conjugarlos:
>
> rmdir s�lo borra si est� vac�o, as� que como primera aproximaci�n se me
> ocurri�:
>
> find -type d -exec rmdir '{}' ';'
find -depth -type d ... etc
Suerte.
--
Re: (Bash) borrando directorios vacios recursivamente
Author: Iván Sánchez Ortega
Date: Fri, 29 Jul 2005 07:27
Date: Fri, 29 Jul 2005 07:27
50 lines
2864 bytes
2864 bytes
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Javier M Mora (jamarier) dixit:
[...]
> rmdir s�lo borra si est� vac�o, as� que como primera aproximaci�n se me
> ocurri�:
>
> find -type d -exec rmdir '{}' ';'
[...]
> Por otra parte, el arbol de directorios no est� limitado en su
> profundidad as� que repetir el comando n veces, no valdr�a, porque no
> podemos asegurar que tenga una profundidad de directorios vacios n+1.
Creo que la soluci�n pasa por ordenar los resultados del find, de tal manera
que el rmdir borre primero los hijos y despu�s los padres... Un sort -r
(--reverse) hace el truco...
find -type d | sort -r
Ahora hay que pasarle esas l�neas, una a una, como par�metro a un rmdir
- --ignore-fail-on-non-empty ... Pero como mis dotes de programaci�n en bash
son pr�cticamente nulas estoy pr�cticamente seguro de que esto *no*
funciona:
for i in `find -type d | sort -r` do rmdir $i; done;
Seguro que alg�n monstruo de la programaci�n en bash me dice c�mo se har�a
bien.... porfaporfaporfaplis O:-)
Ciao,
- --
- ----------------------------------
Iv�n S�nchez Ortega -ivansanchez-arroba-escomposlinux-punto-org
http://acm.asoc.fi.upm.es/~mr/
Proudly running Debian Linux with 2.6.11-1-k7 kernel, KDE3.4.0, and PHP
5.0.4-0.10 generating this signature.
Uptime: 09:19:22 up 7 days, 26 min, 2 users, load average: 1.48, 2.00, 1.58
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
iD8DBQFC6dpTR56dWuhgxGgRArUdAJ4kyEmppMkvizNKtceYnpYnhbZ0TQCgvn1t
S+doC2ttD99M4Tc6h7gZkqo=
=J0XG
-----END PGP SIGNATURE-----
Re: (Bash) borrando directorios vacios recursivamente
Author: Alberto Cabello Sanchez
Date: Fri, 29 Jul 2005 09:23
Date: Fri, 29 Jul 2005 09:23
17 lines
1908 bytes
1908 bytes
Iv�n S�nchez Ortega wrote: > Creo que la soluci�n pasa por ordenar los resultados del find, de tal manera > que el rmdir borre primero los hijos y despu�s los padres... Un sort -r > (--reverse) hace el truco... > > find -type d | sort -r > > Ahora hay que pasarle esas l�neas, una a una, como par�metro a un rmdir > - --ignore-fail-on-non-empty ... Pero como mis dotes de programaci�n en bash > son pr�cticamente nulas estoy pr�cticamente seguro de que esto *no* > funciona: > > for i in `find -type d | sort -r` do rmdir $i; done; > Siento contradecirte, pero que eso s� funciona si pones en �ltimo punto y coma justo antes del "do".
Re: (Bash) borrando directorios vacios recursivamente
Author: Carlos
Date: Fri, 29 Jul 2005 13:52
Date: Fri, 29 Jul 2005 13:52
32 lines
2027 bytes
2027 bytes
Javier M Mora (jamarier) wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> haciendo un scriptcillo en bash, me encuentro con un arbol de
> directorios que puede tener directorios vacios.
>
> Quiero borrar dichos directorios vacios y si al borrar un directorio su
> directorio queda igualmente vacio este tambien ha de borrarse, y as�
> hasta que todos los directorios que queden est�n con al menos un
> fichero/directorio.
>
> tengo varios elementos en la mano, pero no se muy bien como conjugarlos:
>
> rmdir s�lo borra si est� vac�o, as� que como primera aproximaci�n se me
> ocurri�:
>
> find -type d -exec rmdir '{}' ';'
>
> a parte de generar muchos errores (que se pueden eliminar usando la
> opci�n: --ignore-fail-on-non-empty) no hace el proceso recursivo. De
> hecho, find encuentra los ficheros de padres a hijos y no al contrario
> que ser�a lo ideal.
Me acabo de fijar en man find, y adem�s de -depth (procesar primero los
hijos), est� -empty (�!). As� que...
find . -type d -depth -empty -exec rmdir '{}' ';'
...te deber�a servir. Hay que leer el manual :)).
--
Re: (Bash) borrando directorios vacios recursivamente
Author: Javier M Mora (jamarier)
Date: Fri, 29 Jul 2005 19:11
Date: Fri, 29 Jul 2005 19:11
52 lines
2812 bytes
2812 bytes
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Carlos escribi�:
> Javier M Mora (jamarier) wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>>
>> find -type d -exec rmdir '{}' ';'
>>
>> a parte de generar muchos errores (que se pueden eliminar usando la
>> opci�n: --ignore-fail-on-non-empty) no hace el proceso recursivo. De
>> hecho, find encuentra los ficheros de padres a hijos y no al contrario
>> que ser�a lo ideal.
>
> Me acabo de fijar en man find, y adem�s de -depth (procesar primero los
> hijos), est� -empty (�!). As� que...
>
> find . -type d -depth -empty -exec rmdir '{}' ';'
>
> ...te deber�a servir. Hay que leer el manual :)).
Oh, gran maestro entre maestros, yo te saludo. Reconozco que soy de los
que he dicho muchas veces que find tiene muchas opciones interesantes,
pero despu�s de leerme el manual de bash para aprender a programarlo, lo
intent� con el de find y se ve que ley opci�n si, opci�n no y esas me
las salt�.
De todas formas, cada me parece que programar en bash es un castigo que
no me he merecido. (el �ltimo problema lo tengo con nombres de ficheros
con espacios). Voy a pasar de sufrimientos y voy a usar el perl m�s
guarro que he visto en mi vida: ;-)
`cps $uno $destino`
`finds -name asdfo asdf > fulu `
foreach $i (@ficheros) { `cps $i $destino`}
etc, etc, etc.
Seguiremos informando.
atte. javier m mora
- --
Javier Maria Mora Merchan
(GPGP) Key ID: 0x794F3D83
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
iD8DBQFC6n+epRHCj3lPPYMRAmGrAJ9zU2aJMKwayw6M3YO2NudZg9dBhACfdXW4
stNnVT/vMo1pVkEdia+9vVM=
=xJQC
-----END PGP SIGNATURE-----
Re: (Bash) borrando directorios vacios recursivamente
Author: Iván Sánchez Ortega
Date: Fri, 29 Jul 2005 19:58
Date: Fri, 29 Jul 2005 19:58
37 lines
2583 bytes
2583 bytes
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Alberto Cabello Sanchez dixit: >> for i in `find -type d | sort -r` do rmdir $i; done; > > Siento contradecirte, pero que eso s� funciona si pones en �ltimo punto > y coma justo antes del "do". Vale, de acuerdo, no bash no es tan pobre como pensaba en un principio :-) Sin embargo, el usar algo del estilo de (usando "echo" en vez de "rmdir"): for i in `find -type d | sort -r`; do echo $i; done; Tiene el problema de que Bash rompe el resultado del backtick no en los saltos de l�nea, sino en los saltos de l�nea y espacios en blanco. Con lo cual, esto falla horriblemente para directorios con espacios en su nombre. Y yo tengo muchos de esos. Un saludo, - -- - ---------------------------------- Iv�n S�nchez Ortega -ivansanchez-arroba-escomposlinux-punto-org http://acm.asoc.fi.upm.es/~mr/ Proudly running Debian Linux with 2.6.11-1-k7 kernel, KDE3.4.0, and PHP 5.0.4-0.10 generating this signature. Uptime: 21:55:44 up 7 days, 13:02, 2 users, load average: 2.10, 1.97, 1.83 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFC6opcR56dWuhgxGgRApRdAKChZSDfhlbQ898kCUnZINqWs82plACgokAd 2WjgSmX/rmqXbK42+HgckVM= =WXk/ -----END PGP SIGNATURE-----
Re: (Bash) borrando directorios vacios recursivamente
Author: David Serrano (Hue-Bond)
Date: Fri, 29 Jul 2005 23:30
Date: Fri, 29 Jul 2005 23:30
36 lines
2060 bytes
2060 bytes
Javier M Mora (jamarier), vie20050729@21:11:58(CEST): > > De todas formas, cada me parece que programar en bash es un castigo que > no me he merecido. Pues es todo un arte :^). > (el último problema lo tengo con nombres de ficheros con espacios). Esto es típico. Basta con entrecomillar un par de cosas en su sitio y listos. Lo haces un par de veces y le pillas el truco. mkdir -p tmp/a cd !$ touch a\ b c\ d for I in *; do ls -l "$I"; done ## comillas cd ../.. rm -rf tmp/a ## y dejamos el tmp/, que es buena costumbre > Voy a pasar de sufrimientos y voy a usar el perl más > guarro que he visto en mi vida: ;-) > > `cps $uno $destino` $(banner SACRILEGIO\!\!\!) > `finds -name asdfo asdf > fulu ` ARGH! Y a mí que me dolía en la vista leer "targeta"... -- David Serrano
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads