Copiar archivos en orden aleatorio desde Linux

Rafa Morales 27 Mayo 2015
2min
0
Dados

Hay ocasiones en las que he necesitado copiar los archivos de un directorio en uno nuevo pero de manera aleatoria. Suena extraño, porque luego suelen aparecer ordenados por orden alfabético, pero os explico el caso.

Resulta que tengo unos altavoces portátiles que leen los archivos MP3 de una tarjeta SD, pero no los leen por carpetas ni por orden alfabético, sólo los leen en el mismo orden en el que se copiaron en la tarjeta, por eso pensé que la mejor manera de tener las canciones en orden aleatorio era copiarlas de manera aleatoria, aunque cuando pase un tiempo ya te conozcas ese orden.

Por eso he os explico un script en Linux que os permitirá copiar todos los archivos MP3 en el directorio destino que le indiquéis en orden aleatorio. Os puntualizo algunos detalles.

  • La llamada se realizará desde el mismo directorio donde se encuentren los archivos MP3 y de la siguiente manera "script.sh directorio_destino". El directorio se almacerá en la variable $1 pero no debemos añadir al final el separador "/" porque no funcionará el script. Espero en un futuro mejorarlo.
  • IFS es la variable Internal Field Separator, que indica cómo se van a separar los elemento de la lista del for. Es importante establecerlo al salto de línea porque si no los espacios en blanco de los títulos de las canciones los tomará como archivos nuevos.
#!/bin/bash

IFS=$'\n'

for file in $(ls *.mp3 | shuf)
do
  echo "Copiando $1/$file..."
  cp $file $1/$file
done

echo "Copiado finalizado"

Si queréis aprender más sobre Shell Script en Linux podéis leer este artículo.