Entonces, digamos, tengo un directorio con un montón de archivos como g.txt, donde g.txt se modificó por última vez el 20 de junio de 2012.
¿Cómo cambiaría el nombre de todos los archivos (como g.txt) con la última fecha de modificación del 20 de junio de 2012 añadida al final?
date
implementación es esa? Mi GNUdate
no parece manejar la entrada.Aquí hay una versión del one-liner de goldschrafe que:
también hace frente a los nombres de archivo que comienzan con un guión
for f in *; do mv -- "$f" "$f-$(date -r "$f" +%Y%m%d)"; done
fuente
date -r "$f" +%Y%m%d
o no funcionará siPOSIXLY_CORRECT
está en el medio ambiente. En general, las opciones deben ir antes que otros argumentos."${f}"
.Obligatorio zsh one-liner (sin contar la carga única de componentes opcionales):
Usamos el
stat
incorporado delzsh/stat
módulo y lazmv
función para cambiar el nombre de los archivos. Y aquí hay un extra que coloca la fecha antes de la extensión, si corresponde.fuente
Como entendí, no sabemos de antemano cuál es la fecha de modificación. Por lo tanto, necesitamos obtenerlo de cada archivo, formatear la salida y cambiar el nombre de cada archivo de manera que incluya la fecha de modificación en los nombres de archivo.
Puede guardar este script como algo así como "modif_date.sh" y hacerlo ejecutable. Lo invocamos con el directorio de destino como argumento:
modif_date.sh txt_collection
Donde "txt_collection" es el nombre del directorio donde tenemos todos los archivos que queremos renombrar.
fuente
stat
utilidad diferente o ninguna.ls
no es confiable . En algunas variantes de Unix, los nombres de usuarios y grupos pueden contener espacios, lo que alterará la alineación de las columnas de fecha.ls
como una fecha y una hora (en lugar de una fecha y un año) debe estar en el año actual. Esto no es verdad. Es en los últimos seis meses; eso podría ser en el año anterior (por ejemplo, del 27 de septiembre de 2016 al 31 de diciembre de 2016 en los últimos seis meses). (6) A riesgo de repetir el Wiki de Greg (que @Gilles ya citó), los nombres de archivo que contienen líneas y espacios nuevos pueden hacer que esto falle. ... (Continúa)Aquí hay una versión de la línea única de cas (basada en el revestimiento de línea de goldschrafe) extendida con idempotencia ,
es decir, extendido a archivos de prefijo con fecha y hora y para hacer esto solo para aquellos que aún no tienen prefijo de fecha y hora .
Caso de uso: útil si agrega nuevos archivos al directorio y desea agregar un prefijo de fecha y hora a aquellos que aún no tienen uno.
fuente
for f in *.jpg ; do jhead -ft "$f" ; done
fuente: unix.stackexchange.com/a/290755/9689