如何获取目录中的文件计数(递归)但排除具有特定名称的目录

如何获取目录中的文件计数(递归)但排除具有特定名称的目录

这非常类似于问题,但我需要更进一步。我正在使用 Synology 驱动器,并且有大量@eaDir我想忽略的目录(以及这些目录中的文件)。我怎样才能做到这一点?

这是一个递归命令,可以很好地处理隐藏文件(我想要的)...但是如何更改它以排除目录名称@eaDir

find .//. ! -name . -print | grep -c //

答案1

如果您不想进入任何指定的目录,@eaDir则不应使用!before -name

 mkdir -p a/@eaDir
 mkdir -p b/c/@eaDir
 mkdir -p d/e/f
 touch a/@eaDir/xxx
 touch b/yyy
 touch b/c/@eaDir/xxx
 touch d/e/f/yyy
 find . -name '@eaDir' -prune -o -print

会给你:

.
./b
./b/yyy
./b/c
./a
./d
./d/e
./d/e/f
./d/e/f/yyy

find .//. -name '@eaDir' -prune -o -print | grep -c // 

会给你:9

如果名称匹配,-name '@eaDir'则跳过下面的树的其余部分('-prune'),否则打印名称(-o -print

相关内容