1 votos

terminal de la secuencia de comandos para cambiar el nombre de carpetas en un régimen específico

tengo unos cientos de archivos de vídeo almacenados cada uno en una carpeta. el esquema que puse el nombre de cada carpeta es como este:

ABCD

para películas con títulos a partir de Un,B,C o D, por ejemplo. En esta carpeta son las carpetas de película como esta

Blade Runner 2049 (2017) 0526 20180223Eph

0526 es un número específico de este archivo/carpeta.

Me gustaría cambiar el nombre de todas las carpetas a este esquema:

(0526) Blade Runner 2049 (2017) 20180223Eph

pero no sé cómo hacer esto en mi mac?! por favor, tenga en cuenta, que algunas carpetas no tienen el sufijo como 20180223Eph.

Debe realizarse para todas las películas en un turno - cambiar el nombre de todos mediante el uso del buscador sería un poco largo...

Gracias de antemano,

mnasdaq

sorting of my movies

1voto

user3439894 Puntos 5883

En primer lugar, tengo que decir que el ejemplo bash código utilizado en esta respuesta, que se muestra más abajo, no significa de ninguna manera robusta, sin embargo, no conseguir el trabajo hecho!

Con el siguiente como una muestra representativa de la estructura jerárquica de directorios:

.
├── ABCD
├── EFGH
├── IJKL
├── MNOP
│   ├── A Most Violent Year (2014) 1180 20150807Lov
│   ├── A Most Wanted Man (2014) 1146
│   ├── A Nightmare on Elm Street (2010) 0432
│   ├── A Perfect Getaway (2009) 0433
│   └── ¡NO! (2012) 0939
├── QRST
├── UVWX
└── YZ

A continuación, después de ejecutar el ejemplo bash código se guarda como un bash script, y ejecutar desde el directorio que contiene la estructura jerárquica que se muestran anteriormente, los resultados de los directorios será como se muestra a continuación, y dado que la declaró de salida deseado, basado en la muestra representativa de la estructura jerárquica de directorios que se muestra arriba:

.
├── ABCD
├── EFGH
├── IJKL
├── MNOP
│   ├── (0432) A Nightmare on Elm Street (2010)
│   ├── (0433) A Perfect Geatway (2009)
│   ├── (0939) ¡NO! (2012)
│   ├── (1146) A Most Wanted Man (2014)
│   └── (1180) A Most Violent Year (2014) 20150807Lov
├── QRST
├── UVWX
└── YZ

Para utilizar el ejemplo bash código, En la Terminal cd a el directorio que contiene el ABCD, EFGH, etc. directorios y ejecutar los siguientes comandos:

touch rendir; nano rendir

En nano copiar y pegar el ejemplo bash de código, se muestra a continuación, en la rendir archivo y, a continuación, presione Control+X y luego Y y luego Enter.

Siguiente:

chmod u+x rendir

Ahora que es ejecutable, ejecutar, escribiendo:

./rendir

A continuación, pulse Enter para ejecutarlo.

Ejemplo bash código de:

#!/bin/bash

find -E . -type d -regex '.* [0-9]{4}$' > /tmp/foo

while read -r l; do
    p="$(dirname "$l")"
    d="$(basename "$l")"
    n="$(awk '{print "("$NF")"}'<<<"$d")"
    f="$(awk '{$NF=""; sub(/ $/, "", $0); print $0}'<<<"$d")"
    echo mv "$l" "$p/$n $f"
done</tmp/foo

find -E . -type d -regex '.* [0-9]{4} .*$' > /tmp/foo

while read -r l; do
    p="$(dirname "$l")"
    d="$(basename "$l")"
    n="$(awk '{print "("$(NF - 1)")"}'<<<"$d")"
    f="$(awk '{$(NF - 1)=""; print $0}'<<<"$d" | awk 'sub(/  /," ")')"
    echo mv "$l" "$p/$n $f"
done</tmp/foo

rm /tmp/foo

Tenga en cuenta que tal como ha sido codificado, que es la salida de la mv comandos que sería ejecutado si echo no estaba allí. Después de las pruebas y el examen de la salida para ver que el mv comandos están debidamente formado, puede editar rendir (nano rendir) y retire las dos ocurrencias de echo, guardar el archivo, utilizando de nuevo (Control+X y luego Y y, a continuación, Enter) y ejecutarlo de nuevo.

En este punto usted debe tener el resultado deseado, como se muestra en la segunda tree estructura jerárquica de directorios que se muestra arriba. Este ejemplo bash código no tiene en cuenta cualquier desviación de lo que se expresó en el OP y comentarios a la OP.


NOTA: nunca Se debe ejecutar código sin antes estar debidamente respaldados y / o probar el código en una muestra de copia de los originales.


Si yo supiera awk mejor que me imagino que un awk programa puede ser escrito para manipular la cadena de entrada a la deseada salida de cadena en una sola llamada de awk, pero no sé awk lo suficientemente bien como para lograr eso.

Nota: El ejemplo bash código es sólo eso y no emplea ningún error en el manejo y está destinado sólo para mostrar una de las muchas formas de realizar una tarea. La responsabilidad recae siempre sobre el Usuario para agregar y/o el uso apropiado de manejo de errores como necesitaba/quería.

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