2017-12-06 6 views
2

私のカメラで作成したファイルを管理しようとしています。Mac OS Shell:正確な修正日時でファイルを検索

RawFilesとプロキシファイル用に2つのフォルダが1つあります。

RawFilesフォルダ内のすべてのファイルをループして、変更した日付を取得し、同じ変更日の一致するファイルを探したいとします。

私はこれまでのところ(ファイルパスを変更する必要があります)

私は、正確なタイムスタンプと一致したファイルを「見つける」ためのより良い方法を見つけることができませんでした次のスクリプトを持っています。タイムスタンプと一致するファイルを見つけるはずの行をコメントアウトしました。

私は

#!/bin/bash 

echo "Start Renaming Proxy files matching RAW files." 

fmt='%Y%m%d%H%M%S' 

RAWFILES=("/Volumes/RAWCard/"*.CRM) 

PROXYDIR="/Volumes/ProxyCard/DCIM" 

for f in "${RAWFILES[@]}" 
do 

echo "${f}"; 

export STAMP="$(stat -f "%Sm" -t "$fmt" "$f")" 

echo "${STAMP}" 

echo "1" 

# find $PROXYDIR -type f -newermt "${STAMP}" ! -newermt "${STAMP}" 

echo "Parse" 

date -j -f %s -v +1S "${STAMP}" +"$fmt" 

done``` 
+0

ないあなたのQが何であるかを確認してください。コードレビューを依頼している場合は、Qの下部にある「フラグ」リンクを使用してモデレータにhttps://codereview.stackexchange.comに移動するよう依頼する必要があります。 'find'は妥当に見えます。間違いがある場合は、詳細を投稿して、人々が問題を再現できるようにしてください。がんばろう。 – shellter

+0

* "ProxyCard" *とは何ですか?実際に何をしようとしていますか?ファイルはどのようにして新しいものでも、それよりも新しいものではないでしょうか?なぜあなたは日時が2番目の日時に一致すると思いますか?あなたが実際に試合を見つけるときに何をしたいですか?なぜ明白な理由がないのに "1"を印刷するのですか? –

+0

ProxyCardは別のフォルダです。私は基本的に2つのフォルダがあります。私は作成日が一致する2つの異なるフォルダにファイルがありますが、ファイル名は異なります。希望は意味をなさない。私は、作成日を照合して、プロキシフォルダ内のファイルの名前を変更するスクリプトを作成しようとしています。私は質問を更新しようとします。 –

答えて

1

ない特定のperlなどに依存せずにMacOSの端末でこの作業を維持したいのですが、私はあなたに何をしているのかを理解しますが、これは役立つはずです。あなたはこのように一度のファイルの全体の束の1970年1月1日(エポック)からの秒に変更(またはアクセス、変更または出生時間)を取得するためにstatを使用することができます。

stat -f "%m %SN" RAWCard/* 

をサンプル出力

1511359473 RAWCard/step1.png 
1511359474 RAWCard/step2.png 
1512638778 RAWCard/step3.png 

あなたは両方のディレクトリのために、あなたがして、共通のフィールド(時間)にラインを結合するためにjoinを使用できることを行う場合は、次の

stat -f "%m %SN" RAWCard/* > raw 
stat -f "%m %SN" ProxyCard/* > proxy 
join raw proxy 

サンプル出力

1511359473 RAWCard/step1.png ProxyCard/step1.png 
1511359474 RAWCard/step2.png ProxyCard/step2.png 
1512638778 RAWCard/step3.png ProxyCard/step3.png 

それとも、あなたが一度にそれをすべて行うことができます。

join <(stat -f "%m %SN" RAWCard/*) <(stat -f "%m %SN" ProxyCard/*) 

あなたはその後、タイムスタンプフィールドを削除したい場合は、あなたが行うことができます:

join -o 1.2,2.2 ... 

ループ内でペアを読み取ることもできます。

join -o 1.2,2.2 ... | while read a b ; do 
    echo $a is friends with $b 
done 

同じ秒で2枚の画像が撮影されている場合や、同じ秒で撮影された画像がない場合に問題が発生することがあります。

ワーキングスクリプト -

echo "Start Renaming Files" 

RAWFILES="/Volumes/RAWCard/CRM/REEL_002/*" 

PROXYDIR="/Volumes/ProxyCard/DCIM/136_1205/*.MP4" 

stat -f "%m %SN" /Volumes/RAWCard/CRM/REEL_002/*.CRM > raw 
stat -f "%m %SN" /Volumes/ProxyCard/DCIM/136_1205/*.MP4 > proxy 

join raw proxy 

join -o 1.2,2.2 raw proxy | while read a b; do 
    echo $a is friends with $b 
    rawfilebasename=$(basename "$a") 
    rawfilename="${rawfilebasename%.*}" 
    echo $rawfilename 
    proxydirname=$(dirname "$b") 
    proxyfilename=$(basename "$b") 
    proxyextension="${proxyfilename##*.}" 
    echo $proxydirname/$rawfilename.$proxyextension 
    mv $b $proxydirname/$rawfilename.$proxyextension 

done 
+0

ありがとうございます!作成日が1511359473のProxyCardフォルダ内のファイルを1つ見つけることはできますか?私は一致するProxyCardファイルの名前を変更する必要があります。これをループする方法があれば、私は名前を変更する必要のあるファイルパスを得るために何らかの文字列解析を行うことができると思います。 –

+0

これは 'stat -f"%m%SN "ProxyCard/* | awk '/ 1511359473/{print $ 2}' ' –

+0

これはビデオカメラであり、すべての動画は1秒以上の長さです。したがって、すべてのファイルは少なくとも秒で区切られた異なるタイムスタンプを持つでしょう –

関連する問題