En primer lugar, hice la misma pregunta en el desbordamiento de la pila, pero no estoy seguro de si está justo allí. Es por eso que decidí publicarlo aquí también.
Me está costando mucho intentar copiar la fecha de creación y modificación de unos archivos a otros archivos.
He convertido algunos archivos MXF a MOV, pero lamentablemente los nuevos archivos MOV no tienen la misma fecha de creación.
Ahora busqué preguntas similares y encontré diferentes respuestas, pero esta parece ser la más simple:
#!/bin/bash
for f in *.MXF; do
touch -r "$f" "${f%MXF}mov"
done
Desafortunadamente, no funciona para mí, ni con Terminal ni con Automator.
Guardé el código con TextEdit. En la Terminal ejecuté chmod+x para hacer que el archivo fuera ejecutable y lo puse en la carpeta donde están mis MXF y movs.
Pero recibo el siguiente error:
toque: *.MXF: No existe tal archivo o directorio.
También probé mxf en lugar de MXF.
Esta es la salida de ls-l de la carpeta de prueba
-rwxrwxrwx 1 username staff 258458160 5 Jan 2014 570_0301.MXF
-rwxrwxrwx 1 username staff 241431870 5 Jan 2014 570_0301.mov
-rwxrwxrwx 1 username staff 974595120 5 Jan 2014 570_0306.MXF
-rwxrwxrwx 1 username staff 911745994 5 Jan 2014 570_0306.mov
-rwxrwxrwx 1 username staff 667679280 5 Jan 2014 570_0308.MXF
-rwxrwxrwx 1 username staff 624468526 5 Jan 2014 570_0308.mov
Debido a que logré copiar la fecha de modificación, parece que todos los archivos ya tienen la misma fecha, pero esto no cubre la fecha de creación.
¿Quizás alguien podría ayudarme? ¿Cambiará la fecha de modificación y creación? Porque ambos son importantes... ¡
Muchas gracias de antemano y todo lo mejor!
EDITAR: El script funcionó gracias a user3439894.
Pero sigue sin actualizar la fecha de creación...
MXF: creado el 05.01.2014 06:49, modificado el 05.01.2014 06:50
mov: creado el 23.06.2016 05:34, modificado el 05.01.2014 06:50
¿Hay alguna manera de corregir esto?
Como esto no funciona para usted, le sugiero que haga lo que sugirió fd0 y use SetFile
. Esto se usará junto con GetFileInfo
, los cuales son parte de las herramientas de línea de comandos para Xcode.
No necesita instalar Xcode.app, que es de ~3,80 GB, solo ~160 MB para las herramientas de línea de comandos para Xcode.
En terminal:xcode-select --install
Consulte Cómo instalar herramientas de línea de comandos en OS X Mavericks y Yosemite (sin Xcode) , que también es para OS X El Capitan.
Aquí hay un script bash para usar con SetFile
y GetFileInfo
:
#!/bin/bash
for f in *; do
if [[ -f $f ]] && [[ ${f##*.} == MXF ]] && [[ -f ${f%.*}.mov ]]; then
cDate="$(GetFileInfo -d "$f")"
mDate="$(GetFileInfo -m "$f")"
SetFile -d "$cDate" -m "$mDate" "${f%.*}.mov"
fi
done
for f in *.MXF; do touch -r "$f" "${f%MXF}mov"; done
funciona bien para mí en un sistema de archivos HFS+. Ambos stat
y GetFileInfo
me confirma que me funciona sin necesidad de usar SetFile
. Si, dado que no funciona, es más fácil para mí ofrecer una SetFile
solución como lo he hecho algunas veces en el pasado con otras publicaciones.if
declaración : if [[ -f "$f" ]] && ...
, solo por si acaso. De esta manera, lo que sea que esté en el directorio solo si es un archivo normal que termina en .MXF
y tiene un archivo correspondiente, .mov
GetFileInfo obtendrá la fecha y hora de creación y la fecha y hora modificada y las aplicará al archivo de destino.Si solo necesita copiar la fecha de modificación a la fecha de creación en los mismos archivos, puede usar mi secuencia de comandos modificada:
#!/bin/bash
for f in *; do
cDate="$(GetFileInfo -d "$f")"
mDate="$(GetFileInfo -m "$f")"
SetFile -d "$mDate" "$f"
done
usuario3439894
ls -l
directorio de destino. Continúa en el siguiente comentario...usuario3439894
$filename.MXF
y que coincidían con cada conjunto de archivos y , ¡probé el n. ° 1 y funcionó bien! Entonces, ¿qué problema tienes con eso? Tenga en cuenta que los archivos no pueden ser ya que distingue entre mayúsculas y minúsculas. Lo mismo vale para , debe ser eso y no . (Por eso dije incluir la salida de ls -l para el directorio de destino).$filename.mov
$filename
.MXF
.mov
for f in *.MXF; do touch -r "$f" "${f%MXF}mov"; done
.MXF
.mxf
.mov
.MOV
frase
usuario3439894
.MXF
y ?.mov
Por cierto, ¡no pregunté solo si los permisos en todos los archivos eran los mismos! Pedí la salida dells -l
directorio de destino para poder ver los nombres de los archivos, etc. Además, es por eso que dije que tiene mucho que hacer en esta pregunta y que lo limite a un bloque de código y proporcione un mínimo , Completo y Verificable ejemplo . ¡No puede esperar que lo ayudemos si no tenemos todos los datos relevantes!frase
fd0
touch
comando solo opera en el tiempo de acceso y modificación que debería cambiar el tiempo de cambio, no el tiempo de creación.SetFile
es la herramienta que necesitas usar.frase
usuario3439894
GetFileInfo -d $filename.mov
, que obtiene la fecha de creación, muestra lo mismo$filename.mov
después de la ejecuciónfor f in *.MXF; do touch -r "$f" "${f%MXF}mov"; done
que para$filename.MXF
. Entonces, ¿por qué seSetFile
necesita?fd0
touch -r
, leí el manual que es incorrecto.frase
usuario3439894
cd
al directorio que contiene los archivos.MXF
y.mov
y luego en la línea de comando utilizada exactamente:for f in *.MXF; do touch -r "$f" "${f%MXF}mov"; done
frase
usuario3439894
uname -a; bash --version
frase