如何用Fish Shell脚本查找无对应图片的孤立.xmp/.pp3/.out.pp3文件
在Fish Shell中查找孤立的元数据文件
以下脚本可递归查找后缀为.xmp、.pp3、.out.pp3且无对应基础图片文件的文件,并将结果存入变量isolated_meta_files:
# 初始化结果变量 set isolated_meta_files () # 递归遍历目标后缀的文件 for file in (find . -type f \( -name "*.xmp" -o -name "*.pp3" -o -name "*.out.pp3" \)) # 移除文件末尾的元数据后缀,得到对应的基础图片文件名 set base_file (string replace -r '\.(xmp|pp3|out\.pp3)$' '' -- $file) # 检查基础图片文件是否不存在 if not test -f "$base_file" # 将孤立的元数据文件加入结果变量 set isolated_meta_files $isolated_meta_files "$file" end end
代码说明
- 查找目标文件:
find . -type f \( -name "*.xmp" -o -name "*.pp3" -o -name "*.out.pp3" \)递归扫描当前目录下所有符合后缀要求的普通文件。 - 生成基础文件名:
string replace用正则匹配移除文件末尾的元数据后缀,确保得到对应的图片文件名(例如file_a.jpg.xmp会转为file_a.jpg,file_b.pp3转为file_b)。 - 检查文件存在性:
test -f "$base_file"判断基础图片文件是否存在,not取反后将无对应图片的元数据文件加入结果变量。
验证示例
针对你给出的文件列表:
file_a.jpg.xmp、file_a.jpg.pp3对应的基础文件file_a.jpg存在,不会被加入变量;file_b.pp3对应的基础文件file_b不存在,会被加入变量;file_c.nef.xmp对应的基础文件file_c.nef存在,不会被加入变量;file_c.jpg.xmp对应的基础文件file_c.jpg不存在,会被加入变量(若你示例中该文件确实无对应图片,需注意这一点)。
内容的提问来源于stack exchange,提问作者vato
相关产品推荐
相关产品推荐

