Soy un converso de PC, y bastante novato cuando se trata de scripts de shell / bash, pero realmente quiero aprender / entender más.
Mi necesidad: necesito poder escanear una carpeta, encontrar cualquier archivo .rar, extraer los archivos en su lugar y luego eliminar el .rar asociado. Cada uno también puede tener los archivos .r00, .r01, ... asociados, por lo que también deben eliminarse después.
¿Alguien puede ayudarme a descubrir (y entender) cómo escribir un guión para esto? Cuantos más comentarios, mejor.
command-line
bash
script
rar
Jason T Featheringham
fuente
fuente
Respuestas:
Supongo que solo desea escanear la carpeta actual (y no todas las demás carpetas debajo de ella):
La clave es poner el nombre del archivo en "" al pasarlo
unrar
para evitar problemas con espacios en el nombre.Ahora, si desea tener esto como un script que puede ejecutar, puede hacer lo siguiente
Esto le brinda un editor simple para archivos de texto, los comandos esenciales se muestran en la parte inferior. Tipo
seguido por el bloque de código en la parte superior, guarde el archivo y salga. Luego (en el shell nuevamente) escriba
para marcarlo como ejecutable (para que el shell lo reconozca como un comando).
La eliminación automática tiene una advertencia:
unrar
no devuelve un estado de error si las cosas salen mal, por lo que puede perder sus archivos rar. Si esto no es un problema, agreguedespués de que
unrar
en el bucle anterior hará el trabajo. El segundo parámetro se usa para crear todos los.r04
sufijos posibles eliminando primero el sufijo (${rarfile%%.rar}
) y luego iterando de 0 a 9 dos veces para obtener todas las combinaciones posibles (ejecuteecho foo{0..9}
en bash para ver cómo funciona). Como la mayoría de estos nombres de archivo no existen, he agregado-f
una opción para evitar mensajes de error.Si está bastante seguro de que no hay otros archivos con un
.rXX
sufijo en el mismo directorio, un simplehace el truco también.
Si no tienes
rar
/unrar
ya:~/Downloads
y haga doble clic en el archivo descargado para descomprimir. Serar
creará una carpeta.Abra la Terminal y ejecute los siguientes comandos
instalar los binarios (ejecutables)
También debemos asegurarnos de que el shell luego encuentre los binarios
fuente
podrías hacer algo como esto:
el script funciona de la siguiente manera: busca archivos rar de forma recursiva en el directorio en el que se encuentra (el punto) canaliza todos los resultados a una lista de argumentos (xargs) que se pasa al comando 'unrar'
Lo mismo en la segunda línea, pero ahora se pasa para eliminar (rm). La bandera -f asegura que los archivos se eliminen instantáneamente, no se le pedirá su permiso. El rm -f es un comando poderoso que debes usar con cuidado, así que piensa en lo que eliminaría si lo ejecutaras antes de eliminarlo, o simplemente prueba esto haciendo:
Una cosa sobre el comando unrar: unrar no es un comando estándar en Mac OSX (no estoy seguro si este es el caso en otras distribuciones de Linux / Unix), así que asegúrese de tenerlo instalado en su máquina.
Nota: Hay una diferencia importante entre bien, pero
find . -iname *.r*
yfind . -iname '*.r*'
en relación con la forma en cáscaras de Unix manejan comodines:*.r*
en el directorio actual y los pasará como parámetros afind
. Esto funcionará bien si hay un archivo que coincida de todos modos, pero fallará si hay varios (porque entonces la llamada esfind . -iname foo.rar bar.rar
pero-iname
solo toma un argumento).''
se pasa el patrón (sin el )find
y la expansión de comodines se realiza mediantefind
(que luego intenta hacer coincidir cada archivo que encuentra).Entonces, en general, los patrones pasados
find
deben incluirse''
para producir el resultado deseado.fuente
Yo uso unar , que es una versión de línea de comandos de The Unarchiver.
Estos también funcionan con rutas que contienen espacios:
O si instala Bash 4 y agrega
shopt -s globstar
a~/.bash_profile
:fuente