如何递归计算Linux目录中的文件?

我找到了这个:

find DIR_NAME -type f ¦ wc -l

但是当我运行它时,它返回以下错误。

find:paths必须在表达式之前:|


#1楼

对于当前目录:

find -type f | wc -l

#2楼

要确定当前目录中有多少文件,请输入ls -1 | wc -l ls -1 | wc -l 。 这使用wc来计算ls -1输出中的行数(-l) 。 它不计算dotfiles。 请注意,我在本HOWTO的先前版本中使用的ls -l (这是前面示例中的“L”而不是“1”)实际上会给您一个大于实际计数的文件计数。 感谢Kam Nejad这一点。

如果你只想计算文件而不包括符号链接(只是你可以做什么的一个例子),你可以使用ls -l | grep -v ^l | wc -l ls -l | grep -v ^l | wc -l ls -l | grep -v ^l | wc -l (这次是“L”而不是“1”,我们想要一个“长”列表)。 grep检查以“l”开头的任何行(表示链接),并丢弃该行(-v)。

相对速度:“ls -1 / usr / bin / | wc -l”在卸载的486SX25上大约需要1.03秒(/ usr / bin /在这台机器上有355个文件)。 “ ls -l /usr/bin/ | grep -v ^l | wc -l ”大约需要1.19秒。

资料来源: http : //www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html


#3楼

如果您想要分析当前目录下每个目录中有多少个文件:

for i in */ .*/ ; do echo -n $i": " ; (find "$i" -type f | wc -l) ;
done

当然,这可以全部放在一条线上。 括号阐明其输出wc -l应该正在观看(在这种情况下find $i -type f )。


#4楼

您可以使用

$ tree

安装包后用

$ sudo apt-get install tree

(在Debian / Mint / Ubuntu Linux机器上)。

该命令不仅显示文件的计数,还显示目录的计数。 选项-L可用于指定最大显示级别(默认情况下,是目录树的最大深度)。

通过提供-a选项也可以包含隐藏文件。


#5楼

如果您想知道当前工作目录中存在多少个文件和子目录,您可以使用这个单行程序

find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n

这将在GNU flavor中起作用,并且只是从BSD linux的echo命令(例如OSX)中省略-e。


#6楼

如果你想避免错误的情况,不要让wc -l看到带有换行符的文件(它将被视为2个以上的文件)

例如,假设我们有一个文件,其中包含一个EOL字符

> mkdir emptydir && cd emptydir
> touch $'file with EOL(\n) character in it'
> find -type f
./file with EOL(?) character in it
> find -type f | wc -l
2

由于至少gnu wc似乎没有读取/计数空终止列表的选项(除了文件),最简单的解决方案就是不传递文件名,但每次找到文件时都会输出静态输出,例如,在与上面相同的目录中

> find -type f -exec printf '\n' \; | wc -l
1

或者如果你的find支持它

> find -type f -printf '\n' | wc -l
1

#7楼

你可以尝试:

find `pwd` -type f -exec ls -l {} ; | wc -l

#8楼

将这几个答案结合在一起,最有用的解决方案似乎是:

find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} sh -c 'echo -e $(find "{}" -printf "\n" | wc -l) "{}"' |
sort -n

它可以处理奇怪的事情,例如包含空格括号甚至是新行的文件名。 它还根据文件数对输出进行排序。

您可以在-maxdepth之后增加数字以获得子目录。 请记住,这可能需要很长时间,特别是如果您有一个高度嵌套的目录结构与高-maxdepth数字组合。


#9楼

这种使用格式过滤的替代方法计算所有可用的grub内核模块:

ls -l /boot/grub/*.mod | wc -l

#10楼

在我的计算机上, rsyncfind | wc -l更快一点 find | wc -l在接受的答案中。 例如,您可以计算/Users/joe/的文件,如下所示:

[joe:~] $ rsync --stats --dry-run -ax /Users/joe/ /xxxNumber of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes

第二行包含文件数,在上例中为150,481。 作为奖励,您还可以获得总大小(以字节为单位)。

备注:

  • 第一行是文件,目录,符号链接等的统计,这就是它比第二行更大的原因。
  • --dry-run (或简称-n )选项对于不实际传输文件很重要!
  • /xxx参数可以是任何空文件夹或非现有文件夹。 不要使用/这里。
  • 我使用-x选项“不跨文件系统边界”,这意味着如果你为/执行它并且你连接了外部硬盘,它将只计算根分区上的文件。

#11楼

ls -l | grep -e -x -e -dr | wc -l
  1. 长名单
  2. 过滤文件和目录
  3. 计算过滤后的行号

#12楼

这里有很多正确的答案。 这是另一个!

find . -type f | sort | uniq -w 10 -c

哪里. 是要查找的文件夹, 10是用于对目录进行分组的字符数。


#13楼

我编写了ffcnt来加速特定情况下的递归文件计数:旋转磁盘和支持范围映射的文件系统。

它可以比ls或基于find的方法快一个数量级,但是YMMV。


#14楼

用bash:

使用()创建一个条目数组,并使用#获取计数。

FILES=(./*); echo ${#FILES[@]}

好的,它不会递归计算文件,但我想首先显示简单的选项。 常见用例可能是创建文件的翻转备份。 这将创建logfile.1,logfile.2,logfile.3等。

CNT=(./logfile*); mv logfile logfile.${#CNT[@]}

启用bash 4+ globstar递归计数(如@tripleee所述)

FILES=(**/*); echo ${#FILES[@]}

为了递归地获取文件数,我们仍然可以以相同的方式使用find。

FILES=(`find . -type f`); echo ${#FILES[@]}

#15楼

find -type f | wc -l

或(如果目录是当前目录)

找 。 -type f | wc -l


#16楼

这将完全正常。 简单的简短。 如果要计算文件夹中存在的文件数。

ls | wc -l

#17楼

您可以使用命令ncdu 。 它将递归计算Linux目录包含的文件数。 以下是输出示例:

它有一个进度条,如果你有很多文件很方便:

要在Ubuntu上安装它:

sudo apt-get install -y ncdu

基准测试:我使用https://archive.org/details/cv_corpus_v1.tar(380390文件,11 GB)作为文件夹,其中必须计算文件数。

  • find . -type f | wc -l find . -type f | wc -l :大约1m20s完成
  • ncdu :大约1分20秒完成

#18楼

由于UNIX中的文件名可能包含换行符(是,换行符),因此wc -l可能会计算太多文件。 我会为每个文件打印一个点,然后计算点数:

find DIR_NAME -type f -printf "." | wc -c

#19楼

tree $DIR_PATH | tail -1

样本输出:

5309个目录,2122个文件


#20楼

如果你需要的是递归计算特定的文件类型 ,你可以这样做:

find YOUR_PATH -name '*.html' -type f | wc -l

-l只是显示输出中的行数。


#21楼

对于名称中带空格的目录...(基于上面的各种答案) - 递归打印目录名称,其中包含以下文件的数量:

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done

示例 (为便于阅读而格式化):

pwd/mnt/Vancouver/Programming/scripts/claws/corpusls -ltotal 8drwxr-xr-x 2 victoria victoria 4096 Mar 28 15:02 'Catabolism - Autophagy; Phagosomes; Mitophagy'drwxr-xr-x 3 victoria victoria 4096 Mar 29 16:04 'Catabolism - Lysosomes'ls 'Catabolism - Autophagy; Phagosomes; Mitophagy'/ | wc -l138## 2 dir (one with 28 files; other with 1 file):
ls 'Catabolism - Lysosomes'/ | wc -l29

使用tree更好地可视化目录结构:

tree -L 3 -F ..├── Catabolism - Autophagy; Phagosomes; Mitophagy/│   ├── 1│   ├── 10│   ├── [ ... SNIP! (138 files, total) ... ]│   ├── 98│   └── 99└── Catabolism - Lysosomes/├── 1├── 10├── [ ... SNIP! (28 files, total) ... ]├── 8├── 9└── aaa/└── bbb3 directories, 167 filesman find | grep mindep-mindepth levelsDo not apply any tests or actions at levels less than levels(a non-negative integer).  -mindepth 1 means process all filesexcept the starting-points.

ls -p | grep -v / ls -p | grep -v / (在下面使用)来自https://unix.stackexchange.com/questions/48492/list-only-regular-files-but-not-directories-in-current-directory上的答案2

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done
./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
./Catabolism - Lysosomes: 28
./Catabolism - Lysosomes/aaa: 1

应用程序:我想在几百个目录中找到最大文件数(所有深度= 1)[再次下面的输出格式为可读性]:

date; pwdFri Mar 29 20:08:08 PDT 2019/home/victoria/Mail/2_RESEARCH - NEWStime find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done > ../../aaa0:00.03[victoria@victoria 2_RESEARCH - NEWS]$ head -n5 ../../aaa./RNA - Exosomes: 26./Cellular Signaling - Receptors: 213./Catabolism - Autophagy; Phagosomes; Mitophagy: 138./Stress - Physiological, Cellular - General: 261./Ancient DNA; Ancient Protein: 34[victoria@victoria 2_RESEARCH - NEWS]$ sed -r 's/(^.*): ([0-9]{1,8}$)/\2: \1/g' ../../aaa | sort -V | (head; echo ''; tail)0: ./Genomics - Gene Drive1: ./Causality; Causal Relationships1: ./Cloning1: ./GenMAPP 21: ./Pathway Interaction Database1: ./Wasps2: ./Cellular Signaling - Ras-MAPK Pathway2: ./Cell Death - Ferroptosis2: ./Diet - Apples2: ./Environment - Waste Management988: ./Genomics - PPM (Personalized & Precision Medicine)1113: ./Microbes - Pathogens, Parasites1418: ./Health - Female1420: ./Immunity, Inflammation - General1522: ./Science, Research - Miscellaneous1797: ./Genomics1910: ./Neuroscience, Neurobiology2740: ./Genomics - Functional3943: ./Cancer4375: ./Health - Disease

sort -V是一种自然的排序。 ...所以,我在任何这些(Claws Mail)目录中的最大文件数是4375个文件。 如果我左键( https://stackoverflow.com/a/55409116/1904943 )这些文件名 - 它们都以数字命名,从1开始,在每个目录中 - 并填充到5位数,我应该没问题。


附录

查找目录中的文件,子目录的总数。

$ date; pwd
Tue 14 May 2019 04:08:31 PM PDT
/home/victoria/Mail/2_RESEARCH - NEWS$ ls | head; echo; ls | tail
Acoustics
Ageing
Ageing - Calorie (Dietary) Restriction
Ageing - Senescence
Agriculture, Aquaculture, Fisheries
Ancient DNA; Ancient Protein
Anthropology, Archaeology
Ants
Archaeology
ARO-Relevant Literature, NewsTranscriptome - CAGE
Transcriptome - FISSEQ
Transcriptome - RNA-seq
Translational Science, Medicine
Transposons
USACEHR-Relevant Literature
Vaccines
Vision, Eyes, Sight
Wasps
Women in Science, Medicine$ find . -type f | wc -l
70214    ## files$ find . -type d | wc -l
417      ## subdirectories

#22楼

这应该工作:

find DIR_NAME -type f | wc -l

说明:

  • -type f仅包含文件。
  • |而不是¦ )将find命令的标准输出重定向到wc命令的标准输入。
  • wc (字数统计)用于计算其输入( docs )上的换行符,单词和字节。
  • -l只计算换行符。

笔记:

  • DIR_NAME替换为. 在当前文件夹中执行命令。
  • 您还可以删除-type f以在计数中包含目录(和符号链接)。
  • 如果文件名可以包含换行符,则此命令可能会过度计数。

解释为什么您的示例不起作用:

在您显示的命令中,您不使用“管道”( | )来连接两个命令,而是使用shell将其识别为命令或类似内容的损坏条( ¦ )。 这就是你收到错误信息的原因。

递归计算Linux目录中的文件相关推荐

  1. linux 目录中的文件和子目录生成jar包文件的方法

    linux 目录中的文件和子目录生成jar包文件的方法 jar cvf spark-libs.jar -C //usr/cwgis/app/spark/jars/ .//注意:.点前面有一个空格 [r ...

  2. linux终端删除文件命令_如何在Linux终端中删除文件和目录

    linux终端删除文件命令 Fatmawati Achmad Zaenuri/Shutterstock.comFatmawati Achmad Zaenuri / Shutterstock.com T ...

  3. linux判断目录是否存在命令,linux shell 中判断文件、目录是否存在的方法

    本文主要介绍了linux shell 中判断文件.目录是否存在的方法,分享给大家 -e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为 ...

  4. linux shell 获取表,bash - 如何获取shell脚本中目录中的文件列表?

    bash - 如何获取shell脚本中目录中的文件列表? 我试图使用shell脚本获取目录的内容. 我的脚本是: for entry in `ls $search_dir`; do echo $ent ...

  5. linux中如何统计目录中的文件,[Linux目录文件]在Linux中统计目录内文件

    //调用opendir和readdir函数对指定目录进行遍历操作 //然后打印输出指定目录中各种类型的文件数目 #include #include #include #include #include ...

  6. linux查找目录中指定文件或遍历指定文件夹

    查找目录中指定文件 1.终端输入:find 指定文件夹 指定文件名 2.终端输入:ll 指定文件夹 其中,文件夹可以不指定,但搜索较慢.ll主要是遍历比较快.

  7. linux系统中的文件传输

    Linux系统中的文件传输 1 实验环境 2 scp命令 3 rsync命令 3.1 rsync和scp命令对比 3.2 rsync命令用法 4 文件的归档压缩 4.1 文件归档 4.2 文件压缩 4 ...

  8. 如何使用C或C ++获取目录中的文件列表?

    如何从C或C ++代码内部确定目录中的文件列表? 我不允许执行ls命令并从程序中解析结果. #1楼 GNU手册FTW http://www.gnu.org/software/libc/manual/h ...

  9. Linux目录功能及文件类型,linux目录作用详解(超详细,树状排版)

    自己在网上找了好久,没找到,干脆自己做一个.给大家分享下,希望能顺便指出我的错误.请复制到记事本,然后取消自动换行.看起来就会很清晰了. /根目录 │ ├boot/启动文件.Linux的内核及引导系统 ...

最新文章

  1. 双主数据库配置与应用
  2. Dapper基础知识一
  3. hibernate的Configuration类和SessionFactory接口
  4. 详述WebLogic反序列化远程命令执行漏洞的处理过程,云和恩墨技术通讯精选
  5. 雷军:小米10是首款支持8x8 MU-MIMO的手机
  6. C语言中 malloc函数介绍
  7. R语言做复杂金融产品的几何布朗运动的模拟
  8. html + js实现马赛克画板
  9. BIOS三种硬盘模式
  10. 华东交通大学计算机调剂,【通知】华东交通大学2020年硕士研究生调剂通知
  11. 探索:使用北鲲云平台利用Gaussian16进行HAT反应过渡态的寻找
  12. 手把手带你快速实现直播平台源码聊天室
  13. Python - - 面向对象 - - 初始面向对象
  14. SDNUOJ 1703.字谜|STL库中map的使用/map映射
  15. 「Unity2D」使用Unity创建一个2D游戏系列-1
  16. stm32F103采用内部晶振8MHz时钟和外部晶振初始化代码
  17. C语言新建文件写入数据
  18. 闭式系统蒸汽管径推荐速度_动力蒸汽管径计算公式及焓值对照表
  19. 2022中国智能制造领域最具商业合作价值企业盘点
  20. 游戏不能在虚拟机内运行(已解决)

热门文章

  1. Android StateListDrawable的坑
  2. 有道云笔记 网络连接失败
  3. socket不能bind请求的地址_socket通信原理
  4. 互联网思维-NO.1思维(1)
  5. Nginx和Tengine
  6. RSA加密和DH加密
  7. Java并发之ReentrantLock锁
  8. LeetCode 6 Z字形变换
  9. c语言博客作业02--循环结构
  10. android 自定义 styleable 属性