2 votos

Encontrar/Unrar/Eliminar De Secuencia De Comandos

Soy un PC convertir, y bastante novato cuando se trata de shell/bash scripting, pero tengo muchas ganas de aprender/entender más.

Mi necesidad: necesito ser capaz de escanear una carpeta, encontrar ninguno .rar archivos, extraer los archivos en el lugar, y eliminar los asociados .rar después. Cada uno puede tener también el .r00, .r01, ... archivos asociados, por lo que aquellos deben ser eliminados después también.

Alguien me puede ayudar a averiguar (y entender) cómo escribir un guión para esto? El más comentarios, el mejor.

4voto

Justin Love Puntos 3073

se podría hacer algo como esto:

find . -iname '*.rar' | xargs unrar x

find . -iname '*.r*' | xargs rm -f

el script funciona de la siguiente manera: se busca recursivamente para archivos rar en el directorio en el que está (el punto) canaliza todos los resultados para una lista de argumentos (xargs) que se pasa a través del comando 'descomprimir'

Mismo en la segunda línea, pero ahora se pasa a quitar (rm). El f-bandera se asegura de que los archivos se borran al instante, no se le pedirá su permiso. La rm-f es un poderoso comando que se debe utilizar con cuidado, de manera de pensar acerca de lo que se eliminaría si desea ejecutarlo antes de eliminar, o simplemente probar esta haciendo:

find . -iname '*.r*'

Una cosa acerca de la unrar comando: unrar no es un estándar de comando en Mac OSX (no estoy seguro si este es el caso en otras Linux/Unix distribuciones), así que asegúrese de que tiene instalado en su máquina.


Nota: Hay una pequeña pero importante diferencia entre find . -iname *.r* y find . -iname '*.r*' sobre la forma de Unix conchas de mango comodines:

  • En la primera forma, los comodines se expanden por el intérprete de comandos (por lo que el shell buscará todos los archivos/carpetas que coinciden *.r* en el directorio actual y pasar estas como parámetros a find. Esto funciona bien si hay un archivo para que coincida con de todos modos, pero no si hay varios (porque entonces la llamada es find . -iname foo.rar bar.rar pero -iname sólo toma un argumento).
  • En la segunda forma, el patrón (sin el '') se pasa a find y el comodín de expansión se realiza por find (que, a continuación, intenta hacer coincidir todos los archivos que encuentre).

Así que en general los patrones pasan a find debe estar encerrado en '' para producir el resultado deseado.

3voto

Supongo que usted sólo desea escanear la carpeta actual (y no el resto de carpetas debajo de ella):

for rarfile in *.rar; do
    unrar x "$rarfile"
done

Lo clave es poner el nombre del archivo en "" cuando la paso a unrar para evitar cualquier tipo de problemas con los espacios en el nombre.

Ahora, si usted quiere tener esto como una secuencia de comandos que se pueden ejecutar, puede hacer lo siguiente

 cd ~
 mkdir .bin 
 echo 'PATH=$PATH:$HOME/.bin' >> .profile
 echo 'export PATH' >> .profile
 . ./.profile
 nano .bin/extract_all_rars

Esto le da un sencillo editor de archivos de texto, comandos esenciales se muestran en la parte inferior. Tipo de

 #!/bin/bash

seguido por el bloque de código en la parte superior, guarde el archivo y salga del editor. Entonces (en la shell de nuevo) tipo de

 chmod +x .bin/extract_all_rars

para mark ejecutable (de manera que el shell reconoce como un comando).

Eliminación automática tiene una advertencia: unrar no devuelve un estado de error si las cosas van mal, así que usted puede perder los archivos rar. Si esto no es un problema, añadiendo

 rm -f "$rarfile" ${rarfile%%.rar}.r{0..9}{0..9} 

después de la unrar en el bucle de arriba va a hacer el trabajo. El segundo parámetro se utiliza para crear todas las posibles .r04 sufijos por primera quitando el sufijo (${rarfile%%.rar}) y, a continuación, recorrer de 0 a 9 dos veces para obtener todas las combinaciones posibles (ejecutar echo foo{0..9} en bash para ver cómo funciona). Como la mayoría de estos nombres de archivo no existe, he agregado -f como una opción para evitar los mensajes de error.

Si usted está bastante seguro de que no hay otros archivos con un .rXX sufijo están en el mismo directorio, un simple

rm -${rarfile%%.rar}.r??

¿el truco también.


Si usted no tiene rar/unrar que ya:

  • Descargar RAROSX 4.2 de rarlab.com
  • En el Finder, abra ~/Downloads y haga doble clic en el archivo descargado para desempacar. Un rar se creará la carpeta
  • Abrir Terminal y ejecutar los siguientes comandos

    cd ~/Downloads/rar
    sudo install -d rar unrar /usr/local/bin
    

    para instalar los archivos binarios (ejecutables)

  • Asimismo, debemos asegurarnos de que el shell después encuentra los binarios

    cd ~
    echo 'PATH=$PATH:/usr/local/bin' >> .profile
    echo 'export PATH' >> .profile
    . ./.profile
    

1voto

Yo uso la unar, que es una versión de línea de comandos de La Aplicación.

Estos también trabajan con rutas que contengan espacios:

find . \( -name \*.rar -o -name '*.r[0-9][0-9]' \) -print0 | xargs -0 unar
find . -name '*.r[a0-9][r0-9]' -exec unar {} \+
find . -name '*.r*' -delete

O si instalar Bash 4 y añada shopt -s globstar a ~/.bash_profile:

unar **/*.r*
shopt -s extglob; printf %s\\n **/*.@(rar|r[0-9][0-9])
rm **/*.r[a0-9][r0-9]

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X