Data di creazione e modifica del tempo di copia batch da file utilizzando OSX


1

Prima di tutto, ho posto la stessa domanda allo overflow dello stack, ma non sono sicuro che sia proprio lì. Ecco perché ho deciso di pubblicarlo anche qui.

Sto facendo fatica a provare a copiare la data di creazione e modifica di alcuni file su altri file.
Ho convertito alcuni file MXF in MOV, ma sfortunatamente i nuovi file MOV non hanno la stessa data di creazione.
Ora ho dato un'occhiata a domande simili e ho trovato risposte diverse, ma questa sembra essere la più semplice:

    #!/bin/bash
    for f in *.MXF; do
     touch -r "$f" "${f%MXF}mov"
    done


Sfortunatamente non funziona per me, né con Terminal né con Automator.
Ho salvato il codice con TextEdit. Nel terminale ho eseguito chmod + x per rendere eseguibile il file e inserirlo nella cartella in cui sono i miei MXF e mov.

Ma sto ricevendo il seguente errore:
tocca: * .MXF: nessun file o directory simile
ho provato anche mxf invece di MXF.

Questo è l'output di ls-l dalla cartella test

-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

Poiché sono riuscito a copiare la data di modifica, sembra che tutti i file abbiano già la stessa data, ma questo non copre la data di creazione.

Forse qualcuno potrebbe aiutarmi? Cambierà la data di modifica e creazione? Perché entrambi sono importanti ...
Grazie mille in anticipo e tutto il meglio!


EDIT: lo script funziona grazie a user3439894.
Ma non aggiorna ancora la data di creazione ...
MXF: creato il 05.01.2014 06:49, modificato il 05.01.2014 06:50
mov: creato il 23.06.2016 05:34, modificato il 05.01.2014 06:50

C'è un modo per correggere questo?


Hai molto da fare in questa domanda e StackTranslate.it è probabilmente un posto migliore da chiedere. Detto questo, modificherei la domanda in modo da avere solo un blocco di codice su ciò che stai tentando di provare e quindi seguire [Come creare un esempio minimo, completo e verificabile} ( stackoverflow.com/help/mcve ) da includere in quel blocco di codice. Includere anche nelle informazioni l'output di ls -lper la directory di destinazione. Continua nel prossimo commento ...
user3439894,

Inoltre, con una manciata di $filename.MXFe $filename.movfile in cui $filenamecorrispondevano tutti i set .MXFe .movfile, ho testato il numero 1 come for f in *.MXF; do touch -r "$f" "${f%MXF}mov"; donee ha funzionato bene! Quindi che problema hai? Si noti che i .MXFfile non possono essere .mxfsensibili al maiuscolo / minuscolo. Lo stesso vale per .mov, deve essere quello e non .MOV. (Ecco perché ho detto di includere l'output di ls -l per la directory di destinazione.)
user3439894

@ user3439894 Grazie per le informazioni. ls -l mostra -rwxrwxrwx per tutti i file all'interno della cartella e drwxrwxrwx per la cartella. Se # 1 funziona bene per te (e apparentemente molte altre persone) cosa sto facendo di sbagliato per ottenere "touch: * .MXF: nessun file o directory"?
phramenma,

Quando si esegue il codice dal numero 1, ci si trova nella directory contenente i file .MXFe .mov? A proposito, non ho chiesto solo se le autorizzazioni su tutti i file fossero le stesse! Ho chiesto l'output di ls -lper la directory di destinazione in modo da poter effettivamente vedere i nomi dei file, ecc. Inoltre, questo è il motivo per cui ho detto che hai modo di fare molto in questa domanda e di limitarlo a un blocco di codice e fornire Minimo , Esempio completo e verificabile . Non puoi certo aspettarti che ti aiutiamo se non abbiamo tutti i fatti rilevanti!
user3439894,

Grazie ancora per la rapida risposta. Ho inserito tutto il codice che ho trovato per dare una panoramica di quello che ho provato e trovare la soluzione migliore per quello che voglio fare ...
Saprò

Risposte:


2

Dal momento che questo non funziona per te, ti suggerirò di fare come suggerito e usare fd0 SetFile. Questo verrà usato insieme a GetFileInfo, entrambi i quali fanno parte degli strumenti della riga di comando per Xcode.

Non è necessario installare Xcode.app che è ~ 3.80 GB, solo ~ 160 MB per gli strumenti da riga di comando per Xcode.

Nel terminal: xcode-select --install

Vedi Come installare gli strumenti da riga di comando in OS X Mavericks e Yosemite (senza Xcode) , che è anche per OS X El Capitan.

Ecco uno script bash da usare con SetFilee 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

inserisci qui la descrizione dell'immagine


Immagino che questi file non risiedano su un file system HFS + come ho detto prima YMMV.
fd0,

@ fd0, Purtroppo phramenma non ha detto dove risiedono i file o quale filesystem. for f in *.MXF; do touch -r "$f" "${f%MXF}mov"; donefunziona bene per me su un filesystem HFS +. Entrambi state GetFileInfoconferma che funziona per me senza la necessità di utilizzare SetFile. Sì, dal momento che non funziona, è più facile per me offrire una SetFilesoluzione come ho fatto alcune volte in passato con altri post.
user3439894,

@ user3439894 Grazie mille per il tuo grande aiuto. Lo apprezzo molto e il tempo che dedichi ai miei problemi. : / I file sono memorizzati su un exFat-HDD. Ma sfortunatamente il codice originale ha appena copiato la data di modifica. La tua nuova sceneggiatura ha appena funzionato! Grazie ancora!!! PS Quale applicazione hai usato nello screenshot?
phramenma,

@phramenma, Prego, felice di poterti aiutare. Ho usato Sublime Text e lo uso per alcune delle mie esigenze di scripting.
user3439894,

@@ phramenma, ho aggiunto un altro di prova all'inizio della mia if affermazione : if [[ -f "$f" ]] && ..., solo per buona misura. In questo modo, qualunque cosa si trovi nella directory solo se si tratta di un file normale che termina .MXFcon un .movfile corrispondente , GetFileInfo otterrà la data-ora di creazione e la data-ora modificate e le applicherà al file di destinazione.
user3439894,

-1

Se hai solo bisogno di copiare la data di modifica alla data di creazione sugli stessi file puoi usare il mio script modificato:

#!/bin/bash

for f in *; do


    cDate="$(GetFileInfo -d "$f")"
    mDate="$(GetFileInfo -m "$f")"

    SetFile -d "$mDate" "$f"


done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.