titulo propiedades metadatos mac lista las extensiones editar como cambiar archivos osx bash command-line file-rename

osx - propiedades - Automatice el cambio de nombre de los archivos de video



editar metadatos mp4 (4)

Tengo muchos archivos que quiero cambiar de nombre y me tomaría mucho tiempo hacerlo manualmente. Son archivos de video y generalmente están en este formato: "NOMBRE DE LA EXPOSICIÓN - NÚMERO DE EPISODIO - NOMBRE DE EPISODIO", por ejemplo, "Breaking Bad - 101 - Pilot".

Lo que me gustaría hacer es cambiar la parte "101" a mi propia convención de "S01E01". Me imagino que en una serie de un espectáculo, la única parte secuencial de esa cadena es el último número, es decir. S01E01, S01E02, S01E03, S01E04 etc ...

¿Alguien podría darme consejos sobre cómo hacer esto en la terminal de Mac OS X. Creo que es demasiado complicado de hacer con Automator u otros programas de cambio de nombre de lote ...

Gracias


for FOO in *; do mv "$FOO" "`echo $FOO | sed ''s//([^-]*/) - /([0-9]/)/([0-9][0-9]/)/(.*/)//1 - S0/2E/3/4/g''`" ; done

Esto funciona si hay menos de 10 temporadas.


La siguiente solución:

  • funciona con especificadores de episodios de temporada de 3 y 4 dígitos + (por ejemplo, 107 para la temporada 1, episodio 7 o 1002 para la temporada 10, episodio 2)
  • demuestra técnicas avanzadas de find y bash , como:
    • el -regex primario para -regex nombres de archivo por expresión regular (en lugar de un patrón de comodín, como con -name )
    • execdir para ejecutar un comando en el mismo directorio que cada archivo coincidente (donde {} contiene el nombre del archivo correspondiente solamente)
    • invocar un script bash ad-hoc que demuestre la coincidencia de expresión regular con =~ y los grupos de captura informados a través de la variable ${BASH_REMATCH[@]} ; sustitución de comando ( $(...) ) a la izquierda-pad un valor con ceros; expansión variable para extraer subcadenas ( ${var:n[:m]} ).

# The regular expression for matching filenames (without paths) of interest: # Note that the regex is partitioned into 3 capture groups # (parenthesized subexpressions) that span the entire filename: # - everything BEFORE the season+episode specifier # - the season+episode specifier, # - everything AFTER. # The ^ and $ anchors are NOT included, because they''re supplied below. fnameRegex=''(.+ - )([0-9]{3,4})( - .+)'' # Find all files of interest in the current directory''s subtree (`.`) # and rename them. Replace `.` with the directory of interest. # As is, the command will simply ECHO the `mv` (rename) commands. # To perform the actual renaming, remove the `echo`. find -E . / -type f -regex ".+/${fnameRegex}/$" / -execdir bash -c / ''[[ "{}" =~ ^''"$fnameRegex"''$ ]]; se=$(printf "%04s" "${BASH_REMATCH[2]}"); echo mv -v "{}" "${BASH_REMATCH[1]}S${se:0:2}E${se:2}${BASH_REMATCH[3]}"'' /;


El siguiente script encontrará todos los .mp4 con una cadena de 3 números consecutivos. Ejemplo algo.111.mp4. Lo convertirá en algo.S01E11.mp4. También excluirá cualquier archivo de muestra.

find . ! -name "*sample*" -name ''*.[0-9][0-9][0-9].*.mp4'' -type f | while read filename; do mv -v "${filename}" "`echo $filename | sed -e ''s/[0-9]/S0&E/;s/SS00E/S0/g''`";done;

Al igual que el script anterior, solo funcionará si tiene menos de 10 temporadas.

Para aquellos que están tratando de personalizar su árbol de directorios actual, recomendaría aprender el comando sed y find. Son bastante potentes, son simples y le permitirán sustituir cualquier cadena dentro de un nombre de archivo.


Utilizando la implementación de rename perl , que puede ocuparse fácilmente del relleno adecuado y funciona para cualquier cantidad de puntos y episodios (<100, pero puede adaptarse fácilmente a su formato actual):

$ ls -1 *.avi My Show - 0301 - Qux.avi My Show - 101 - Foo.avi My Show - 102 - Bar.avi My Show - 1102 - Blah.avi My Show - 201 - Quux.avi $ rename -n ''s/- (/d+)(/d{2,}) -/sprintf("- S%02dE%02d -", $1, $2)/e'' *.avi My Show - 0301 - Qux.avi renamed as My Show - S03E01 - Qux.avi My Show - 101 - Foo.avi renamed as My Show - S01E01 - Foo.avi My Show - 102 - Bar.avi renamed as My Show - S01E02 - Bar.avi My Show - 1102 - Blah.avi renamed as My Show - S11E02 - Blah.avi My Show - 201 - Quux.avi renamed as My Show - S02E01 - Quux.avi

Creo que los barcos de homebrew casera con la versión correcta, por lo que es solo una cuestión de instalación a través de

$ brew install rename