如何在Linux中获得一个简单的递归目录列表,不包括某些目录

时间:2016-11-27 02:06:23

标签: linux bash

我需要在Linux中获取一个只有目录和文件名的递归目录列表。它需要包括所有文件,包括隐藏文件,文件名“.svn”除外。

我尝试了“ls”命令的多种组合,但无法弄明白。当使用“ls -R direname / grep -v / $”时,我得到一个目录标题,后跟冒号,我不能使用。

如果我有一个带文件的目录名测试和一个带文件的名为test2的子目录,我需要输出如下所示:

test
test/.filehidden1
test/file2
test/file3.txt
test/test2.log
test/test2/file.hidden1
test/test2/file2.boo
test/test2/file3.boo2

请注意,没有前导斜杠

4 个答案:

答案 0 :(得分:1)

这应该做:

find . ! -path \*.svn\*

这告诉find以递归方式列出路径名不包含.的{​​{1}}中的所有文件。这并不完美,因为它可能隐藏文件.svn

答案 1 :(得分:1)

find . -name .svn -prune -o -print

-prune告诉它不要进入任何匹配的目录。

答案 2 :(得分:0)

这样的事情:

find DIRNAME ! -name .svn

答案 3 :(得分:0)

  

我需要在Linux中获取一个只有目录和文件名的递归目录列表。它需要包括所有文件,包括隐藏文件,文件名“.svn”除外。

您想获取Subversion存储库中的文件列表吗? 这样就可以了:

svn ls -R

如果没有,那么您可以使用find

find . ! -path '*/.svn/*' ! -name .svn

你提到“注意没有前瞻性的斜线”。 如果这非常重要,那么find命令可以改为:

find * .[^.]* ! -path '.svn/*' ! -name .svn