You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选archives目录中比itp-files同名文件新的.gz文件并传入fzy?

解决方案

要实现筛选archives/中比itp-files/同名文件更新的.gz文件并传入fzy,可以利用bash的文件时间比较运算符-nt(表示前者比后者新),同时用while read循环处理文件名(避免空格拆分问题),具体脚本如下:

# 筛选符合条件的文件并传入fzy,最后处理选中的文件
ag -g "\.gz$" archives/ | while read -r archive_file; do
    # 提取文件名(不含路径)
    filename=$(basename "$archive_file")
    # 拼接itp-files中对应同名文件的路径
    itp_file="itp-files/$filename"
    
    # 条件:如果archive文件比itp文件新,或者itp文件不存在(可选:若只保留两边都存在的文件,可加 -f "$itp_file" 判断)
    if [ "$archive_file" -nt "$itp_file" ]; then
        echo "$archive_file"
    fi
done | fzy | while read -r selected_file; do
    echo "selected file: $selected_file"
    # 这里可以添加对选中文件的处理逻辑
done

关键说明:

  1. 文件时间比较:[ "$archive_file" -nt "$itp_file" ]会判断archive_file的修改时间是否晚于itp_file,如果itp_file不存在,该判断也会返回true。如果只想保留itp-files/中存在对应文件的条目,可修改条件为:
    if [ -f "$itp_file" ] && [ "$archive_file" -nt "$itp_file" ]; then
    
  2. 避免文件名空格问题:用while read -r替代for f in $(...),可以正确处理文件名包含空格、特殊字符的情况,防止被错误拆分。
  3. 同名文件路径匹配:如果itp-files/中的文件是去掉.gz后缀的同名文件(比如archives/a.gz对应itp-files/a),可修改文件名提取逻辑:
    filename=$(basename "$archive_file" .gz)
    itp_file="itp-files/$filename"
    

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:40:48