Autor Tema: Script linux??  (Leído 5650 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 3l3m3n7

  • Sv Member
  • ***
  • Mensajes: 256
Script linux??
« : septiembre 26, 2008, 08:23:45 pm »
Buenasss miren queria ver si me ayudan ahi  les voy a contar como esta la cosa, tengo una carpeta con mas o menos 10,000 archivos  algo asi:

archivo.xyz
test.xyzn
asi(J).xyz
laptop.xyz
miguel(J)sj.xyz
bzc(J)adl.xyz
alven.xyz


entonces quiero eliminar todos los que contienen el (J), intente con un :  $: ls | grep '(J)' | xargs rm pero si hago esto me elimina muchos que no tienen la (J) como que no hiciera bien el match....luego hice lo siguiente:

$:  ls | grep '(J)' > list.txt

Al hacer esto me saca un listado perfecto de los que quiero eliminar,mi pregunta es: como puedo hacer un script que me elimine los archivos que estan en list.txt? entiendo que se puede hacer con un For loop, pero no lo logre..haber si me hechan una manitav :unsure:
Todo fuera mucho mejor si todos pusieran de su parte y dejaran el egoismo, eso es para seres poco evolucionados.

Desconectado morph

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 5092
  • Un saludo para mi club de fans!
Re: Script linux??
« Respuesta #1 : septiembre 26, 2008, 09:01:17 pm »
perame a ver si te entiendo, queres un comando en consola que te borre todos los archivos que contengan "(j)"???


My mail: morph[at]svcommunity.org || Linux Certificate No. 426111

Desconectado 3l3m3n7

  • Sv Member
  • ***
  • Mensajes: 256
Re: Script linux??
« Respuesta #2 : septiembre 26, 2008, 09:02:32 pm »
quiero un script que pueda correr que haga esto

rm (primer linea del .txt)
rm (segunda linea del .txt)
rm (tercer linea del .txt)
.
.
.
.
.
 :azn:
Todo fuera mucho mejor si todos pusieran de su parte y dejaran el egoismo, eso es para seres poco evolucionados.

Desconectado Battousai

  • Sv Full Member
  • *
  • Mensajes: 693
Re: Script linux??
« Respuesta #3 : septiembre 27, 2008, 07:11:12 am »
NUNCA pero NUNCA utilizar pipe, grep, capture, read, o loop en la salida de 'ls'.

A diferencia de la creencia popular, 'ls' no está diseñado para enumerar los archivos o analizar sus estadísticas.

siempre hay una mejor manera para hacer esto, por ejemplo. utilizar globs: archivos =(*)

Y para tu consulta utiliza esto

Código: [Seleccionar]
rm -f *\(J\)*
Tan simple como eso eh?

Ojo utiliza solo la -f si estas seguro de lo que estas haciendo de lo contrario no lo utilices
PowerLayer.NET - PowerLayer.NET Web hosting El Salvador
Shared Hosting / Reseller Hosting / VPS / ShoutCast / Backups

SubeTuImagen - Hosting de Imágenes El Salvador
Servicio Alojamiento Imagenes / Subir Fotos / Subir Galerías y mucho más!!

Desconectado morph

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 5092
  • Un saludo para mi club de fans!
Re: Script linux??
« Respuesta #4 : septiembre 27, 2008, 07:15:11 am »
Ayudando un poco con la documentación:

Código: [Seleccionar]
morph@home:~$ rm --help
Usage: rm [OPTION]... FILE...
Remove (unlink) the FILE(s).

  -f, --force           ignore nonexistent files, never prompt
  -i                    prompt before every removal
  -I                    prompt once before removing more than three files, or
                          when removing recursively.  Less intrusive than -i,
                          while still giving protection against most mistakes
      --interactive[=WHEN]  prompt according to WHEN: never, once (-I), or
                          always (-i).  Without WHEN, prompt always
      --one-file-system  when removing a hierarchy recursively, skip any
                          directory that is on a file system different from
                          that of the corresponding command line argument
      --no-preserve-root  do not treat `/' specially
      --preserve-root   do not remove `/' (default)
  -r, -R, --recursive   remove directories and their contents recursively
  -v, --verbose         explain what is being done
      --help     display this help and exit
      --version  output version information and exit

By default, rm does not remove directories.  Use the --recursive (-r or -R)
option to remove each listed directory, too, along with all of its contents.

To remove a file whose name starts with a `-', for example `-foo',
use one of these commands:
  rm -- -foo

  rm ./-foo

Note that if you use rm to remove a file, it is usually possible to recover
the contents of that file.  If you want more assurance that the contents are
truly unrecoverable, consider using shred.

Report bugs to <bug-coreutils@gnu.org>.
morph@home:~$

Hice la prueba y funciona perfectamente y lo útilice sin el FORCE (-f) y también funciona.

Código: [Seleccionar]
morph@home:~/Desktop/Nueva carpeta$ rm *\(j\)*


ADDED:

Gracias Battousai por tu post!!!!


My mail: morph[at]svcommunity.org || Linux Certificate No. 426111

Desconectado 3l3m3n7

  • Sv Member
  • ***
  • Mensajes: 256
Re: Script linux??
« Respuesta #5 : septiembre 27, 2008, 07:38:23 am »
Fijense que no me salio  :wacko:, por eso buscaba algo asi como un script o algo porque son demasiados archivos y pasa esto:

element@element-girl:~/ROMS$ sudo rm *\(J\)*
[sudo] password for element:
sudo: unable to execute /bin/rm: Argument list too long
Todo fuera mucho mejor si todos pusieran de su parte y dejaran el egoismo, eso es para seres poco evolucionados.

Desconectado NoeL

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 3257
    • SvCommunity
Re: Script linux??
« Respuesta #6 : septiembre 27, 2008, 08:25:01 am »
bueno para leer tu archivo linea por linea debes utilizar el bucle while de la siguiente manera:

while read linea
do
   comando
done < archivo
 

Ejemplo: Supongamos que tu archivo de texto se llama list.txt supongo que deberia quedarte mas o menos asi tu archivo bash: OJO NO LO HE PROBADO PERO ESTA ES UNA IDEA GENERAL AHI PODES HACER TUS PRUEBAS

#! /bin/bash

while read line
do
   rm $line*\(J\)*
done < list.txt





Desconectado Battousai

  • Sv Full Member
  • *
  • Mensajes: 693
Re: Script linux??
« Respuesta #7 : septiembre 27, 2008, 11:57:21 am »
Fijense que no me salio  :wacko:, por eso buscaba algo asi como un script o algo porque son demasiados archivos y pasa esto:

element@element-girl:~/ROMS$ sudo rm *\(J\)*
[sudo] password for element:
sudo: unable to execute /bin/rm: Argument list too long


La verdad no entiendo que quieres hacer con el sudo, estas en tu home y te quieres logear como root en tu mismo home? para utilizar un comando rm(que cualquier usuario lo puede hacer) solo simplemente has ese comando dentro de la carpeta donde quieres hacerlo y listo nada de sudo ni de sudo su-

#! /bin/bash

while read line
do
   rm $line*\(J\)*
done < list.txt

Ese bucle lo veo super inecesario y la verdad ni se para que quieres buclearlo el simple rm te hace eso lo que estas haciendo ahi es algo complicado y le estas diciendo que lo hagas dos veces y lo peor aun lo estas haciendo infinito y te puede dar error (aunque no te lo diga la el bash) es mejor de la manera que lo dije es simple facil y bonito.
PowerLayer.NET - PowerLayer.NET Web hosting El Salvador
Shared Hosting / Reseller Hosting / VPS / ShoutCast / Backups

SubeTuImagen - Hosting de Imágenes El Salvador
Servicio Alojamiento Imagenes / Subir Fotos / Subir Galerías y mucho más!!

Desconectado NoeL

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 3257
    • SvCommunity
Re: Script linux??
« Respuesta #8 : septiembre 27, 2008, 12:01:51 pm »
La verdad no entiendo que quieres hacer con el sudo, estas en tu home y te quieres logear como root en tu mismo home? para utilizar un comando rm(que cualquier usuario lo puede hacer) solo simplemente has ese comando dentro de la carpeta donde quieres hacerlo y listo nada de sudo ni de sudo su-

Ese bucle lo veo super inecesario y la verdad ni se para que quieres buclearlo el simple rm te hace eso lo que estas haciendo ahi es algo complicado y le estas diciendo que lo hagas dos veces y lo peor aun lo estas haciendo infinito y te puede dar error (aunque no te lo diga la el bash) es mejor de la manera que lo dije es simple facil y bonito.

creo que vas a tener que ir a leer un poco sobre bucles, dije que no estaba seguro del comando rm $line*\(J\)* por la parte de que quiere borrar los archivos que contengan J si quisiera eliminarlos todos solo seria rm $line, por cierto esta comprobado que el bucle no es infinito y mucho menos le digo que se ejecute dos veces

Desconectado 3l3m3n7

  • Sv Member
  • ***
  • Mensajes: 256
Re: Script linux??
« Respuesta #9 : septiembre 27, 2008, 12:31:37 pm »
Pues la verdad me gusta mas asi como en script proque la idea es siempre aprender algo nuevo, yo se que es mas complicado pero es mas bonito  :yahoo: , pero lamentablemente lo acabo de probar y cuando lo corro como que me intenta borrar palabra por palabra de la linea osea tipo asi:


archivo de prueba.txt

rm archivo
rm: cannot remove `archivo': No such file or directory
rm: cannot remove `de': No such file or directory
rm: cannot remove `prueba.txt': No such file or directory

P.D Si estoy en el home, y uso el sudo para que si los borre pero cuando no lo pongo entonces veo lo que intenta hacer aunq no lo hace x falta de permisos, pero si veo que esta malo lo corrijo y no cometo errores, y cuando vea que ya lo corre bien pues le doy sudo y ahi va  :phew:
Que hara falta para que borre utilizando el nombre completo?
« Última Modificación: septiembre 27, 2008, 12:33:57 pm por 3l3m3n7 »
Todo fuera mucho mejor si todos pusieran de su parte y dejaran el egoismo, eso es para seres poco evolucionados.

Desconectado Battousai

  • Sv Full Member
  • *
  • Mensajes: 693
Re: Script linux??
« Respuesta #10 : septiembre 27, 2008, 12:56:34 pm »
creo que vas a tener que ir a leer un poco sobre bucles, dije que no estaba seguro del comando rm $line*\(J\)* por la parte de que quiere borrar los archivos que contengan J si quisiera eliminarlos todos solo seria rm $line, por cierto esta comprobado que el bucle no es infinito y mucho menos le digo que se ejecute dos veces

Se lo suficiente de bucles y de como se usa gracias, se me olvido poner ahi que 'creia' que fuera infinito error de mi parte, ademas de las dos veces claro que si y te lo explico rapido

1. rm bla bla ya la estas diciendo que borre todo lo que contega J asi que ahi esta haciendo un mini bucle interno
2. como ya esta haciendo ese minibucle  interno del rm le estas diciendo aun con el while que lo haga otra vez interno bucle + while = 2  1+1=2

Pues la verdad me gusta mas asi como en script proque la idea es siempre aprender algo nuevo, yo se que es mas complicado pero es mas bonito  :yahoo: , pero lamentablemente lo acabo de probar y cuando lo corro como que me intenta borrar palabra por palabra de la linea osea tipo asi:


archivo de prueba.txt

rm archivo
rm: cannot remove `archivo': No such file or directory
rm: cannot remove `de': No such file or directory
rm: cannot remove `prueba.txt': No such file or directory

P.D Si estoy en el home, y uso el sudo para que si los borre pero cuando no lo pongo entonces veo lo que intenta hacer aunq no lo hace x falta de permisos, pero si veo que esta malo lo corrijo y no cometo errores, y cuando vea que ya lo corre bien pues le doy sudo y ahi va  :phew:
Que hara falta para que borre utilizando el nombre completo?

Por eso decia que no el while ya borro el archivo y el while lo quiere retomar denuevo.

Podrias decir que quieres hacer mejor o que pretendes hacer? es yo he probado borrar archivo de gran longitud de 1k pero 10k ya lo encuentro exagerado, en realidad quieres borrar esos archivos o quieres borrar esa carpeta?

Por otra parte es muy raro que no puedas a lo mejor esos archivo son duenos de otro usuario

Código: [Seleccionar]
ls -la /home/element/ROMS
Ahi veras quien es el dueno de los archivos y sus grupos y como estan los permisos, cabe mencionar que en donde te puse '/home/element/ROMS' es donde supongo que tienes tus ROMS cambialos si es necesario con la ruta correcta.
PowerLayer.NET - PowerLayer.NET Web hosting El Salvador
Shared Hosting / Reseller Hosting / VPS / ShoutCast / Backups

SubeTuImagen - Hosting de Imágenes El Salvador
Servicio Alojamiento Imagenes / Subir Fotos / Subir Galerías y mucho más!!

Desconectado 3l3m3n7

  • Sv Member
  • ***
  • Mensajes: 256
Re: Script linux??
« Respuesta #11 : septiembre 27, 2008, 01:02:33 pm »
No, fijate q no es porque el otro lo halla borrado sino porque intenta borrar archivos que no existen porque no agarra el nombre completo del archivo sino solo un pedazito entonces eso no existe.. por eso es que me da el error pero ahi ya tope :phew:
Todo fuera mucho mejor si todos pusieran de su parte y dejaran el egoismo, eso es para seres poco evolucionados.

Desconectado Battousai

  • Sv Full Member
  • *
  • Mensajes: 693
Re: Script linux??
« Respuesta #12 : septiembre 27, 2008, 01:10:54 pm »
Supongo que es por el 'rm $line' a lo mejor tienes nombre asi "test file" con espacio
PowerLayer.NET - PowerLayer.NET Web hosting El Salvador
Shared Hosting / Reseller Hosting / VPS / ShoutCast / Backups

SubeTuImagen - Hosting de Imágenes El Salvador
Servicio Alojamiento Imagenes / Subir Fotos / Subir Galerías y mucho más!!

Desconectado 3l3m3n7

  • Sv Member
  • ***
  • Mensajes: 256
Re: Script linux??
« Respuesta #13 : septiembre 27, 2008, 01:30:24 pm »
Es correcto tienen espacio los archivos, pense renombrar los archivos :   archivo prueba 
para que quedara archivoprueba      pero nose cmo renombrarlos todos de una vez
Todo fuera mucho mejor si todos pusieran de su parte y dejaran el egoismo, eso es para seres poco evolucionados.

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: Script linux??
« Respuesta #14 : septiembre 27, 2008, 02:00:48 pm »
jejeje que chistoso, yo tuve ese mismo problema cuando baje el romset de GBA.

La verdad es que los borre usando el selector de pratones de D3lphin  :rofl: pero para darte paja y contribuir al tema te voy a decir que podes usar esto:

find ./ -iname '*\(J\)*' -print0  | xargs -x0 /bin/rm -f

Reemplaza "./" por la ruta de tus ROMS o hace CD primero hacia donde esten.

Lo acabo de probar con 5000 archivos (touch  algo{1..5000}\(j\).txt) y funcionó bien, así que puedo dar fé de que funciona.