如何忽略路径仅按文件名对文件路径数组进行排序?
按文件名反向排序并保留路径的解决方案
要实现保留完整文件路径,仅按文件名(版本号从高到低)排序的需求,你可以通过awk+sort+cut的组合命令完成,具体如下:
基础命令(适用于文件名无空格的场景)
files=($(find -type f -iname 'epo*lnx.zip' | awk -F'/' '{print $NF "\t" $0}' | sort -nr | cut -f2-))
命令分解:
find -type f -iname 'epo*lnx.zip':查找所有匹配文件名模式的文件,输出完整路径awk -F'/' '{print $NF "\t" $0}':以/为分隔符,提取每个路径的最后一段(即文件名),输出格式为文件名\t完整路径sort -nr:按第一个字段(文件名)进行反向数值排序,-n确保版本号的数字按大小排序,-r实现从高到低cut -f2-:移除输出中的第一个字段(文件名),只保留完整路径,最终结果存入数组files
兼容带空格文件名的写法
如果你的文件名可能包含空格,上面的数组赋值方式会出错,建议改用while循环读取:
files=() while IFS= read -r line; do files+=("$line") done < <(find -type f -iname 'epo*lnx.zip' | awk -F'/' '{print $NF "\t" $0}' | sort -nr | cut -f2-)
验证结果
执行上述命令后,数组files的内容将与你期望的一致:
./Public/epo6900lnx.zip ./Desktop/epo6800lnx.zip ./Downloads/epo6700lnx.zip ./Downloads/epo6600lnx.zip
内容的提问来源于stack exchange,提问作者Fried Synapse
相关产品推荐
相关产品推荐

