解决文件无法按照`内容创建时间`进行排序的问题

背景

文件夹中的文件列表具备四个时间属性,创建时间修改时间上次打开时间内容创建时间(图1),但是系统默认不支持按照内容创建时间进行排序(图2)


image-20231110225145410

图1

image-20231110224427744

图2

需求

解决MacOS的文件,无法按照内容创建时间进行排序的问题

思路

文件转换重命名,将原文件名使用内容创建时间进行重命名,然后按照名称进行排序

实现

编写一个 Bash 脚本,用于遍历一个文件夹中的图片文件,使用 mdls 命令获取图片的内容创建时间,并将结果存储到一个变量中进行赋值重命名

#!/bin/bash

# 源文件夹
source_dir="/path/to/source/directory"
# 目标文件夹
target_dir="/path/to/target/directory"

# 遍历源文件夹中的所有图片文件
for file in "$source_dir"/*.{jpg,jpeg,png,gif,bmp}; do
    if [ -f "$file" ]; then
        # 获取文件的内容创建时间
        creation_date=$(mdls -name kMDItemContentCreationDate -raw "$file")
        # 格式化日期为YYYYMMDDHHMMSS
        new_filename=$(date -j -f "%Y-%m-%d %H:%M:%S %z" "$creation_date" "+%Y%m%d%H%M%S")
        # 获取文件的扩展名
        extension="${file##*.}"
        # 构建目标文件的路径
        target_file="$target_dir/$new_filename.$extension"

        # 检查目标文件是否存在,如果存在则添加随机数字
        count=1
        while [ -e "$target_file" ]; do
            random_number=$(shuf -i 1-99999 -n 1)
            new_filename="$new_filename-$random_number"
            target_file="$target_dir/$new_filename.$extension"
            count=$((count + 1))
        done

        # 复制文件并重命名
        cp "$file" "$target_file"
        echo "已重命名并复制 $file 到 $target_file"
    fi
done