我想要获取文件夹内的目录列表,并将该列表输出到可执行文件中,然后使用它们来运行某些程序。
基本上,这个 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 ..... {} +;