You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何通过命令行读取Mac OS Finder自定义排序的文件位置信息

读取Finder自定义自由排列的命令行方案

好问题!Finder里设置为「排列」->「无」时的文件自定义位置(屏幕X/Y坐标),确实可以通过命令行读取,甚至能生成类似ls -R的递归排序列表。下面分几种实用方案详细说明:

一、用系统原生AppleScript直接交互(无需额外工具)

AppleScript是Mac自带的脚本语言,可以直接和Finder通信,获取文件的位置信息,这是最省心的方式,完全不需要安装第三方工具。

单次文件夹查询示例

在终端执行下面的命令,替换/path/to/your/folder为你要查询的文件夹路径,就能得到按Finder自定义顺序排列的文件列表,同时附带X/Y坐标:

osascript -e '
set targetFolder to POSIX file "/path/to/your/folder" as alias
tell application "Finder"
    set fileList to every item of targetFolder
    -- 按X坐标优先、Y坐标次之排序,和Finder视觉顺序完全一致
    set sortedList to sort fileList by {position, position}
    repeat with anItem in sortedList
        set {posX, posY} to position of anItem
        set itemName to name of anItem
        log itemName & " | X: " & posX & ", Y: " & posY
    end repeat
end tell
'

递归生成类似ls -R的列表

如果你需要遍历子文件夹(类似ls -R的效果),可以用下面的Shell脚本结合AppleScript实现:

#!/bin/bash

# 递归处理文件夹的函数
recursive_finder_sort() {
    local target_folder="$1"
    echo "=== $target_folder ==="
    # 调用AppleScript获取当前文件夹的自定义排序结果
    osascript -e '
        set targetFolder to POSIX file "'"$target_folder"'" as alias
        tell application "Finder"
            set fileList to every item of targetFolder
            set sortedList to sort fileList by {position, position}
            repeat with anItem in sortedList
                set {posX, posY} to position of anItem
                set itemName to name of anItem
                log itemName & " (X:" & posX & ", Y:" & posY & ")"
            end repeat
        end tell
    ' | grep -v "execution error"  # 过滤掉可能的错误信息
    
    # 递归遍历子文件夹
    for subfolder in "$target_folder"/*/; do
        if [ -d "$subfolder" ]; then
            recursive_finder_sort "$subfolder"
        fi
    done
}

# 检查输入参数
if [ $# -ne 1 ]; then
    echo "用法: $0 /path/to/your/target/folder"
    exit 1
fi

# 执行递归查询
recursive_finder_sort "$1"

把这段代码保存为finder-sort.sh,执行chmod +x finder-sort.sh赋予权限,然后运行./finder-sort.sh /your/target/folder就能得到递归的自定义排序列表。

二、解析.DS_Store文件(底层方案)

Finder的自定义位置信息实际上存在每个文件夹下的隐藏文件.DS_Store里,你可以用专门的工具解析这个二进制文件:

使用ds_store第三方工具(需Homebrew安装)

首先通过Homebrew安装工具:

brew install ds_store

安装完成后,执行下面的命令就能读取指定文件夹的.DS_Store文件,获取所有文件的位置数据:

ds_store read /path/to/your/folder/.DS_Store

输出里的Iloc条目就是每个文件的X/Y坐标。你可以用grepawk等工具过滤和整理这些数据,生成符合你需求的排序列表。

注意:.DS_Store是Mac特有的隐藏文件,复制文件夹到非Mac系统或删除这个文件后,自定义排序信息会丢失。

三、注意事项

  • AppleScript的排序逻辑和Finder完全一致,优先按X坐标排序,X相同则按Y坐标,和你在图形界面看到的顺序完全匹配。
  • 如果文件夹里没有设置自定义排序(比如刚创建的文件夹,默认是按名称排列),AppleScript会返回默认的排序结果。
  • .DS_Store文件可能包含其他Finder相关的配置(比如图标大小、窗口位置),解析时注意过滤掉不需要的信息。

内容的提问来源于stack exchange,提问作者lamefrog

火山引擎 最新活动