Aquí hay una respuesta para la pregunta extra.
De hecho, quiero poner la fecha de creación de una foto en su nombre de archivo, para obtener algo como 20091231 2359 New Year.jpg. ¿Me temo que necesito una combinación no trivial de comandos para lograr eso?
Suponiendo que desea tomar la fecha de creación de la foto a partir de los datos EXIF, necesitará una herramienta separada para eso. Afortunadamente resulta que jhead
ofrece una forma trivial de hacer exactamente lo que quieres, con su -n
opción.
$ jhead -h
[...]
-n[format-string]
Rename files according to date. Uses exif date if present, file
date otherwise. If the optional format-string is not supplied,
the format is mmdd-hhmmss. If a format-string is given, it is
is passed to the 'strftime' function for formatting
In addition to strftime format codes:
'%f' as part of the string will include the original file name
[...]
Aquí hay un ejemplo:
$ jhead -n%Y-%m-%d-%f New_year.jpg
New_year.jpg --> 2009-12-31-New_year.jpg
Editar : Por supuesto, para hacer esto por un montón de fotos, sería algo como:
$ for i in *jpg; do jhead -n%Y-%m-%d-%f $i; done
Para ajustar el formato de fecha a su gusto, eche un vistazo a la salida de date --help
, por ejemplo; enumerará los códigos de formato disponibles.
(jhead está ampliamente disponible para diferentes sistemas. Si está, por ejemplo, en Ubuntu o Debian, simplemente escriba sudo apt-get install jhead
para instalarlo).
Solo por la parte de cambio de nombre, el programa 'renombrar' funcionará. Es el mismo que el ejemplo que viste en la página del manual, que acaba de cambiar.
fuente
La clave es que, si ha visto un ejemplo que muestra cómo combinar una parte del nombre de archivo con una expresión regular, ese es el único ejemplo que necesita. Las extensiones no tienen un estado especial en los sistemas de archivos Unix: son solo una parte del nombre de archivo que aparece después de un
.
carácter.fuente
mv "$file" yourfile"${file#myfile}"
. Funciona en cualquier shell moderno similar a Bourne (o en cualquier shell POSIX), pero probablemente no en el shell Bourne real.Aquí hay un par de formas diferentes de manipular nombres de archivos
Las expansiones de parámetros en el
mv
comando funcionan de la siguiente manera:${f%.*}
- Elimine el patrón de coincidencia más corto desde el final de la cadena contenida$f
, en este caso elimine todo después e incluyendo el último punto. El single%
significa "el más corto desde el final".${f##*.}
- Elimine el patrón de coincidencia más largo desde el principio de la cadena contenida$f
, en este caso, todo lo anterior e incluido el último punto (esto incluye también otros puntos). El doble#
(##
) significa "el más largo desde el principio".Entonces, por ejemplo, si
$f
contiene "Foo.bar.baZ.jpg":da
y
da
Entonces el
mv
comando, una vez expandido, se vería así:fuente
f%
yf##
se describen aquí, por ejemplo: tldp.org/LDP/abs/html/parameter-substitution.htmlNo hay extensiones de nombre de archivo en Linux.
Use expresiones regulares para cortar subcadenas particulares del nombre de archivo y acceder a ellas.
Ejemplo:
Escenario de la vida real: está extrayendo html de un archivo chm. Los nombres de archivo en Windows no distinguen entre mayúsculas y minúsculas, por lo que en Linux obtendrá enlaces rotos. Tiene un archivo llamado index.HTML , pero href = "index.html" en las URL. Por lo tanto, su objetivo es adaptar los nombres de archivo para que coincidan con los enlaces a ellos.
Suponga que tiene el nombre de archivo en una variable:
A partir de la versión 3.0, bash admite expresiones regulares en sí, por lo que no necesita herramientas adicionales como grep / sed / perl, etc. para realizar la manipulación de cadenas. El siguiente ejemplo ilustra el reemplazo de una coincidencia de fondo en una cadena:
Las cadenas de coincidencia y reemplazo se pueden parametrizar si lo desea, esto proporciona flexibilidad adicional al escribir guiones. El siguiente fragmento de código logra el mismo objetivo:
Consulte los documentos de bash para obtener información adicional.
fuente
Aquí está otro:
fuente
Siempre hay más de una forma de hacerlo. Puse el siguiente script como / usr / local / bin / mrename.
Luego, en el script que contiene los archivos de fotos, simplemente escriba: mrename
También hay una función opcional comentada en el script para escalar las fotos (usando ImageMagick).
Espero que esto sea útil para algunas personas.
fuente
Puede usar la
-X/--keep-extension
opción conrename
(versión 1.600):-X, --keep-extension Save and remove the last extension from a filename, if there is any. The saved extension will be appended back to the filename at the end of the rest of the operations.
rename
está disponible para Mac de Homebrew y para Linux de Linuxbrew (entre otras opciones de instalación, por supuesto).fuente