如何在 Bash 中列出目录和输出

如何在 Bash 中列出目录和输出

我想要获取文件夹内的目录列表,并将该列表输出到可执行文件中,然后使用它们来运行某些程序。

基本上,这个 bash 文件需要我的 内部的文件夹列表$directory,这些文件夹从@sub1@sub2@sub3不等,有时甚至多达 30 个。所有子文件夹都附加有符号@

目前,我手动将子文件夹添加到我的列表中,并使用 进行调用-sub="$subs",其中 subs 在上面定义为 subs="$directory/@sub1;$directory/@sub2;......等

我确实需要维护相同的输出格式,以符合可执行文件的构建方式。

实现自动化的最佳方法是什么?抱歉,如果有点奇怪,这是我的第一个问题。

答案1

可能的解决方案:find . -type d -name '@*' -print0 -maxdepth 1 | xargs -0 yourprog

首先是空文件夹,其中有几个名为@subX 的文件夹,这是我们不想要的文件。

mkdir test
cd test
mkdir @sub1
mkdir @sub2
mkdir @sub3
mkdir subway
touch testfile
cd \@sub2
touch bar
mkdir @test
cd ..

查找内容并将其打印到标准输出、使用它们执行某些操作等都可以使用 来完成find。使用这个而不是尝试解析 ls 输出。

第一个参数是要搜索哪个文件夹(例如find .当前目录)

-type d仅过滤目录(无文件)

-name '@*'任何以 @ 开头的匹配项

-print0将结果打印到标准输出。-print 也可以工作,但是 -print0 在出现空格等情况下会执行特殊操作。

-maxdepth 1不搜索子文件夹)

find . -type d -name '@*' -print0 -maxdepth 1上述设置的结果:

./@sub1./@sub2./@sub3

请注意,这些以 ./ 为前缀,这对您来说可能是个问题,也可能不是问题。

也值得一读:find 的 -exec 选项和 find ..... {} +;

相关内容