我正在尝试管理我的相机创建的文件。
我有两个文件夹,一个用于RawFiles
,另一个用于代理文件。
我想遍历RawFiles文件夹中的所有文件,获取修改日期并找到具有相同修改日期的匹配文件。
到目前为止,我有以下脚本(您可能需要更改文件路径)
我找不到更好的方法来“找到”与精确时间戳匹配的文件。我已经注释掉了应该找到与时间戳匹配的文件的行。
我想在MacOS终端上保持这种工作,而不依赖于perl等。
#!/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 :(得分:1)
我不确定你理解你的目标,但这应该有所帮助。您可以使用stat
在1970年1月1日(epoch)以来的几秒钟内完成修改(或访问,更改或生成时间),如下所示:
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
我建议你经常仔细检查结果文件的数量是否正确 - 因为如果你在同一秒内拍摄了两张图像,或者在同一秒内没有匹配的图像,你会遇到问题。
工作脚本 -
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