如何从每行含2字符的文件生成ls -t带通配符的参数列表?
实现方法
我整理了几个实用的方案,能帮你把文件里的前缀转换成ls -t的参数:
方法1:用xargs快速实现(适合无特殊字符的场景)
如果你的文件名里没有空格、引号这类特殊字符,直接用xargs就能搞定:
xargs -I{} ls -t {}* < your_file.txt
这里的-I{}会把文件里的每一行内容替换成{},再加上通配符*,最终就会生成ls -t RU* 8A* 1C*这样的命令。
方法2:用Shell数组+循环(最安全,支持特殊字符)
如果需要处理带空格或特殊字符的文件名,用Shell数组来收集参数是最稳妥的方式:
# 初始化空数组 args=() # 逐行读取文件内容,把前缀+*加入数组 while read -r prefix; do args+=("${prefix}"*) done < your_file.txt # 执行ls命令,传递所有参数 ls -t "${args[@]}"
这个方法会先把所有前缀*的参数收集到数组里,再一次性传给ls -t,避免了特殊字符导致的分词错误。
方法3:awk配合xargs(灵活处理输出格式)
用awk给每行内容加上*,再通过xargs传给ls -t:
awk '{print $0"*"}' your_file.txt | xargs ls -t
如果要兼容带空格的文件名,可以改成NULL分隔符的版本:
awk '{printf "%s*\0", $0}' your_file.txt | xargs -0 ls -t
printf "%s*\0"会给每个前缀+*加上NULL结尾,xargs -0会识别这个分隔符,确保特殊字符不会被错误拆分。
内容的提问来源于stack exchange,提问作者Sentes Snus
相关产品推荐
相关产品推荐

