gpt4 book ai didi

macos - Mac 操作系统 shell : Find a file by exact modified date time

转载 作者:行者123 更新时间:2023-12-04 03:07:38 26 4
gpt4 key购买 nike

我正在尝试管理由我的相机创建的文件。

我有 2 个文件夹,一个用于 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```

最佳答案

不确定我是否理解您的意图,但这应该有所帮助。您可以使用 stat 一次性获取一大堆文件自 1970 年 1 月 1 日(纪元)以来的修改(或访问、更改或出生时间),如下所示:

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

示例输出

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

如果对两个目录都这样做,则可以使用 join 连接公共(public)字段(时间)上的行:

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

关于macos - Mac 操作系统 shell : Find a file by exact modified date time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47682874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com