Con la Terminal : Buscar y copiar una lista de archivos

Hola a todos los lectores 😀

Después de unas fallidas vacaciones, me digno a escribir estas lineas. Resulta que se dañó mi reproductor de mp3 de 32gb y la única forma de recuperarlo es dándole formato, eso no es problema, lo que en realidad me mortificaba era pensar en el tiempo que mi iba a llevar el seleccionar  y copiar la colección musical que con tanto gusto había confeccionado.

En eso recordé lo poderosa que puede ser la terminal para estos casos y después de unos minutos de leer documentación (no soy la mejor en bash 😛 ) llegué a este método:

1. Hice una lista con todos los archivos del reproductor:

dir /media/musicplayer > lista_de_musica

2. Luego de generar esa lista, aplicamos el siguiente comando:

 cat lista_de_musica | while read f; do find . -name "$f" -exec cp {} /media/musicplayer \;; done

cat lee la lista, acto seguido, find se encarga de buscarlos y finalmente cp lo copia a la carpeta destino, en un ciclo hasta que la última linea del archivo es leída.

y listo!

Es conmovedora la manera en que trabaja la consola verdad?

Estoy segura que puede ser de utilidad en actividades más productivas (y menos triviales que mi reproductor jajaja), y por supuesto que habrían otras maneras de llegar al mismo objetivo (tal vez usando rsync o xargs) pero me pareció que ésta era la manera mas simple de lograrlo.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   elav dijo

    Oh! Genial 😀

  2.   Vampii dijo

    Ehhh…. ¿»dir» ???? ¿Lei bien y usaron en comando «dir»? WTF!!! El comando es «ls»… DIR es un comando de D.O.S. y no de *nix (o GNU/Linux)… Se que soy un viejo Slacker pero, ¿no hay un error ahi?

    Por lo demas, ¡excelente! una buena forma de ser perezoso, es usando la consola 😉

    1.    eliotime3000 dijo

      Estamos iguales n ese punto de DIR, ya que en POSIX se usa LS como su reemplazo.

      Errar es de humanos.

    2.    pepe dijo

      `man dir`

      1.    elav dijo

        Exacto. DIR también existe en nuestras distribuciones 😛

    3.    elav dijo

      De hecho, cuando ejecuto:

      man dir

      Mira lo que me sale al final:

      AUTHOR
             Written by Richard M. Stallman and David MacKenzie.
      1.    Giskard dijo

        Mira tú! Pero eso es reciente, no? Porque yo hace unos años, cuando comencé a usar Linux escribía dir en lugar de ls por costumbre y me pintaba una!

      2.    eliotime3000 dijo

        Retiro lo ue omenté de DIR.

    4.    helena_ryuu dijo

      yo misma lo dije, soy una completa n00b en bash xDDD disculpe si os ofendi con dir jajaja, ya enserio, ya se que estaba ls, pero en ese momento solo me acorde de dir… era nada mas una lista de archivos 😛

      1.    eliotime3000 dijo

        No te preocupes. De igual forma, no soy tan recurrente al bash, así que estamos a mano.

        1.    eliotime3000 dijo

          Y por cierto, te sugiero que pruebes Iceweasel (está en AUR y el logo es más bonito que el de Firefox).

          🙂

          1.    helena_ryuu dijo

            le dare una oportunidad ^^

          2.    elav dijo

            Al final es lo mismo. ¿Para que instalar Iceweasel cuando ya tenemos Firefox en los repositorios?

          3.    cookie dijo

            Eliot, es lo mismo que Firefox pero con logo más feo ¬¬ y luego aparte está en el AUR

          4.    eliotime3000 dijo

            @cookie:
            Depende de cómo lo veas, porque hasta ahora no me ha tocado ver una nueva versión del logo de Iceweasel con un diseño «plano» ni tampoco con una opción para enviar mis datos a Mozilla para ver si funciona bien o no.

            Que el logo de Iceweasel no sea de tu agrado está bien, respeto tu decisión.

      2.    Sam Burgos dijo

        No te preocupes que a cambio de quebrarse la cabeza con bash uno ya no desea hacer las cosas en otros lenguajes ya que no halla para donde 😀 (mi caso particular), aparte que es bueno usarlo para desenvolverse en varias distros

        En cuanto a tu script, me tomé la molestia de ordenarlo un poco y de ponerlo en un pastebin, aunque quisiera saber algunos parámetros para que sirven porque no los entiendo mucho (investigaré cuando esté en mi casa ya que en mi trabajo estoy atado de manos y pies)

        Script -> http://pastebin.com/3c1zwS5y

        1.    helena_ryuu dijo

          efectivamente, lo has dejado mas ordenado, lo iba a hacer asi, pero…. por alguna razón recuerdo los arreglos (que tanto me hacen sufrir en la clase de programación) entonces mejor lo dejé en una sola linea jajaja

          1.    Sam Burgos dijo

            Pues es de ayuda ordenar los códigos porque sino cuesta entenderlos despues (como documentador/analista/programador es un gran dolor eso y te lo digo por experiencia propia)

            Y alguna otra cosa con bash me ofrezco a ayudar con gusto, tampoco soy master en eso pero de los lenguajes que gusto usar (y que tengo mas desempolvados :P) ese es uno de ellos, aunque para alguien que, supuestamente, es novice en bash me has dejado pensando que hace el código en sí 😉 😛

    5.    haobaobatusai dijo

      prueba ejecutando dir

    6.    ecnomus dijo

      No hay error, tambien se puede usar el comando DIR en Linux podria ser mas elegante usar LS pero para sacar una lista de archivos DIR va bien pues actualmente la mayoria de distribuciones traen por defecto el alias dir=’ls -l de fabrica.

  3.   eliotime3000 dijo

    Me gustó el tip. Espero que se redacten más tutoriales acerca de los múltiples usos de la consola de GNU/Linux, que en verdad le supera a la de Windows.

    1.    KZKG^Gaara dijo
      1.    eliotime3000 dijo

        Compartiendo y añadido a favoritos.

  4.   D.Adrian dijo

    Disculpen mi ignorancia, pero la verdad que no entendi casi nada: el primer comando, el dir, hace una lista de los ficheros que estan dentro de una carpeta, luego, segun lo que entiendo, el find va buscando uno a uno esos ficheros descritos en esa lista y los copia hacia otra carpeta. Yo pregunto, para que hace falta buscarlos si ya se que estan en /media/musicplayer, y solo vasta con copiar esa carpeta a otro destino.
    No sera que en /media/musicplayer hay todo tipo de archivos y yo quiero encontrar digamos solo los mp3 y copiarlos a otro lado?, y faltaria en el primer comando algun filtro para que me liste solo los mp3?.
    Si alguien pudiera explicar mejor cual es el problema y que quiero hacer?
    Gracias y disculpen.

    1.    helena_ryuu dijo

      bueno como dices, si que es mas facil solo copiar los ficheros a otro lado, el problema que tuve, es que los ficheros eran ilegibles, en linux, y en windows, asi que solo me quedaba formatearlo 😛 , y volver a llenarlo me daba pereza, por esa razon.
      en cuanto a lo que dices sobre filtrado, creo que debes agregar el flag -o y -name al comando find, algo asi:
      find . \( -name ‘*.jpg’ -o -name ‘*.png’ -o -name ‘*.JPG’ -o -name ‘*.PNG’ -o -name ‘*.JPEG’ -o -name ‘*.jpeg’ \)
      en ese caso filtraria solo los archivos *.jpg, *.JPG, *.png, *.PNG, *.jpeg y *.JPEG

  5.   hexborg dijo

    Enhorabuena. Has usado la terminal como de verdad está pensada para usarse.

  6.   Dcoy dijo

    Qué sería de nuestras vidas sin la poderosa consola :3 .. . .

  7.   pasaba por aqui dijo

    muy bueno, yo tengo
    alias escuchar=’echo «$(find $(pwd) -iname «*.MP3″ )» | xargs -n1 -I aa ln -s «aa» $HOME/escuchar/’

    1.    davidlg dijo

      muy parecido el que yo uso, para mover los archivos que ha terminado el transmision
      [code]find -iname «*.avi» |xargs -i mv {} /home/wizord/Vídeos/
      [/code]

  8.   Uriel dijo

    Disculpen la ignorancia, pero yo tampoco entendí del todo la orden y por ende no sé si aplique o no a lo que quiero hacer.
    Tengo un iPod de 160 gb 6a generación, que desde cuando quiero hacer un respaldo antes de que sea demasiado tarde, sin embargo no sé si con lo que escribas pueda separar la música acorde a las listas de reproducción, ya que hay muchas canciones con el mismo nombre pero en diferentes discos o artistas ¿me explico? por eso no puedo solo copiar los .mp3 a una sola carpeta porque tendría conflictos con las canciones con el mismo nombre. ¿puedo hacer mi respaldo con los comandos que propones o existe alguna otra alternativa?
    Ojalá me puedan ayudar, gracias!!

    pd: pensé instalarle Rockbox, pero no es compatible con mi ipod según la página del desarrollador
    pd2: gtkpod al parecer también copia únicamente los .mp3 sin orden, o tal vez no supe como hacerlo.

  9.   truko22 dijo

    Esta genial 😀

  10.   eliotime3000 dijo

    Pues cada uno es libre de usar el navegador que uno quiera.

    Yo ando usando Iceweasel en Debian con la rama release de mozilla.debian.net, y no estoy en contra de los que usen ese navegador.

    Yo sólo le sugerí que probase Iceweasel a @helena porque Iceweasel se lo identifica por tener un logo bastante tierno (cosa que a muchos no les cae bien), pero no hay que alarmarse.

    Igual, ando usando Iceweasel en Debian porque me da flojera de instalar Firefox y ya tengo Firefox en Slackware y me va de maravillas.

    1.    elav dijo

      Claro. A lo que me refiero es que Firefox ya viene empaquetado en el repositorio. Iceweasel se tendría que instalar desde AUR con todos los riesgos que eso conlleva.

      1.    eliotime3000 dijo

        Ah, bueno. Eso sí, lo que recomendable sería reemplazar Firefox por Iceweasel, ya que he probado teniendo ambos navegadores, pero no se pueden ejecutar ambos a la vez.

        Ni bien termine de experimentar con Slackware, haré una máquina virtual en la que instalaré Arch con Iceweasel y una interfaz ligera (XFCE o LXDE).

    2.    helena_ryuu dijo

      [off-topic]
      jajaja no hay problema, yo se que al fin de cuentas, es firefox con otro logo, y es verdad, esta en aur, lo que puede ser algo riesgoso, el caso es que en la PC de mi hermana esta instalado crunchbang (y por ende iceweasel) y de verdad que el logo es muy kawaii ^^ no entiendo como es que a alguien no le puede gustar ~_~
      [/off-topic]

      1.    eliotime3000 dijo

        Pues, a mí me simpatiza el logo de Iceweasel. A menos me alegra en los días en los cuales me han ido patas arriba.

  11.   eliotime3000 dijo

    Perdonen por el off-topic, pero comentar desde Opera Mini es realmente incómodo.

    1.    sieg84 dijo

      algo incómodo, pero mejoró con el cambio que hubo en los comentarios.

  12.   pepe dijo

    buen trabajo

  13.   Emmanuel dijo

    El tip está más que interesante y útil, pero, ¿se podía hacer de forma tal que se ejecute cada vez que se ingresa un usb? 😮
    Es que sería genial sincronizar ciertas carpetas de la USB con el sistema.
    Saludos y excelente aporte.

  14.   Mauricio dijo

    jajaja, y eso que eres noob en bash.

    Es una de las razobes del porque me enamore de la terminal, por la forma de hacer algunas cosas por ahí de manera muy rápida.

    1.    eliotime3000 dijo

      Y eso es cierto. Además, es mucho mejor que la consola de Windows.

  15.   Pepe López dijo

    Excelente tip. Me lo guardo.

  16.   abejagoqui dijo

    Gracias ! … De gran Ayuda !

  17.   Rey dijo

    Alguien tiene un fichero bash que me copie de linux la siguiente dirección /var/log/apt/history.log a la direccion en windows D:/Copialog el fichero history.log

  18.   Rey dijo

    Alguien tiene un fichero bash que me copie de linux la siguiente dirección /var/log/apt/history.log a la direccion en windows D:/Copialog el fichero history.log por favor enviemelo a mi email rey79cm@gmail.com