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


1

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

好看多了,这个bash的文件需要我里面的文件夹列表$directory,从变化@sub1@sub2@sub3,有时上升到30一路所有子文件夹都附加有@符号。

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

我确实需要为输出保持相同的格式,以便与构建可执行文件的方式保持一致。

什么是自动化的最佳方式?对不起,如果它有点奇怪,我的第一个问题在这里。

Answers:


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

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

另外值得一读:找到-exec选项并找到..... {} +;


随着输出的一点点改变,它确实有效!非常感谢你!你救了我很多个小时。
Ksingh 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.