如何递归地计数Linux目录中的文件?
我发现了这个:
find DIR_NAME -type f ¦ wc -l
但是当我运行它时,它返回以下错误。
查找:路径必须在表达式之前:
如何递归地计数Linux目录中的文件?
我发现了这个:
find DIR_NAME -type f ¦ wc -l
但是当我运行它时,它返回以下错误。
查找:路径必须在表达式之前:
当前回答
对于当前目录:
find -type f | wc -l
其他回答
如果您想知道当前工作目录中存在多少文件和子目录,可以使用这一行程序
find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n
这将在GNU风格下工作,对于BSD linux(例如OSX),只需在echo命令中省略-e即可。
对于当前目录:
find -type f | wc -l
ls -l | grep -e -x -e -dr | wc -l
长串 过滤文件和dirs 计算过滤后的行号
bash:
使用()创建一个条目数组,并使用#获取计数。
FILES=(./*); echo ${#FILES[@]}
它不会递归计数文件,但我想先展示一个简单的选项。一个常见的用例可能是创建文件的滚转备份。这将创建日志文件。1,日志文件。2,日志文件。3等。
CNT=(./logfile*); mv logfile logfile.${#CNT[@]}
启用bash 4+ globstar的递归计数(由@tripleee提到)
FILES=(**/*); echo ${#FILES[@]}
要递归地获得文件的计数,我们仍然可以以相同的方式使用find。
FILES=(`find . -type f`); echo ${#FILES[@]}
如果你需要递归计算特定的文件类型,你可以这样做:
find YOUR_PATH -name '*.html' -type f | wc -l
-l只是显示输出中的行数。
如果需要排除某些文件夹,请使用-not -path
find . -not -path './node_modules/*' -name '*.js' -type f | wc -l