Linux下如何用现有工具过滤管道输入中的有效目录?
解决方案:用系统预装工具筛选现存目录
这好办!完全不用自己写脚本,用Linux自带的xargs配合基础工具就能轻松实现需求。我给你两个实用的方案:
方案1:用xargs+sh做目录判断
直接通过子shell执行目录检查逻辑,逐个验证每个条目:
echo dir1 dir2 file.txt somethingThatDoesNotExist | xargs -n1 sh -c 'if [ -d "$1" ]; then echo "$1"; fi' _
命令细节解释:
xargs -n1:把输入的每个空格分隔条目单独传给后续命令,一次处理一个sh -c '...':启动子shell执行判断逻辑[ -d "$1" ]:检查传入的参数(也就是每个待验证的条目)是否为现存目录_:作为sh -c的第一个参数(对应$0)占位,让实际的目录/文件名成为$1
方案2:用xargs+find(更简洁)
利用find本身会自动忽略不存在路径的特性,直接筛选目录类型条目:
echo dir1 dir2 file.txt somethingThatDoesNotExist | xargs -I{} find {} -maxdepth 0 -type d
命令细节解释:
xargs -I{}:把每个输入条目替换为{},传递给find命令-maxdepth 0:只检查条目本身,不递归查找子目录-type d:仅匹配目录类型的条目,不存在的路径会被find直接跳过
执行任意一个命令后,都会输出你期望的结果:dir1 dir2。
内容的提问来源于stack exchange,提问作者Ludwig Magnusson
相关产品推荐
相关产品推荐

