过滤管道输入中的目录

时间:2019-11-19 11:20:40

标签: linux bash

我有一个bash命令,其中列出了许多文件和目录。我想删除所有不存在的目录。无论如何,我无需创建自己的脚本就能做到这一点吗?即我想使用linux中已有的程序。

例如鉴于我有这个文件夹:

dir1/
dir2/
file.txt

我希望能够运行以下内容:

echo dir1 dir2 file.txt somethingThatDoesNotExist | xargs [ theCommandIAmLookingFor]

并获得

dir1
dir2

2 个答案:

答案 0 :(得分:1)

如果生成推定路径的命令使用更好的定界符会更好,但是您可能正在寻找类似的东西:

... | xargs -n 1 sh -c 'test -d "$0" && echo $0'

答案 1 :(得分:0)

您可以使用grep -v使用此命令行:

your_command | grep -vxFf <(printf '%s\n' */ | sed 's/.$//') -

这将从列表中过滤掉当前路径中的所有子目录。

如果只想列出现有目录,则将-v删除为:

your_command | grep -xFf <(printf '%s\n' */ | sed 's/.$//') -

请注意,全局*/会打印当前路径中所有带有后缀/的子目录,并且sed用于删除最后一个/