谁能在没有子目录的情况下获得“基本子目录”的计数?

谁能在没有子目录的情况下获得“基本子目录”的计数?

我想做的就是获取树的一层上的目录计数。到目前为止我有这个。

find /media/data/temp1  -type d -exec basename {} \;

这给了我这个:

temp1
Coldplay
Greatest Hits
Sex Pistols
never mind the bollocks here's the sex pistols
the great rock and roll swindle
The Boomtown Rats
CD1
CD2
CD3
CD4
Doris Day
Greatest Hits

为了摆脱所有额外的目录,这些目录实际上是 temp1 下“基本”目录的子目录,并摆脱包含我需要获取计数的目录的目录,我这样做:

find /media/data/temp1 -mindepth 1 -maxdepth 1    -type d -exec basename {} \; 

这让我明白了:

Coldplay
Sex Pistols
The Boomtown Rats
Doris Day

我需要获取同一级别上所有目录的计数的实际目录级别。所以我可以用它来跟踪计数器,例如

let TotalDir--
echo "Dir left to do is "$TotalDir""

所以我知道必须有一个简单的函数,我可以将其输入到诸如此之类的语法中以获得我需要的东西。

TotalDir=$( echo find /media/data/temp1 -mindepth 1 -maxdepth 1 -type d -exec basename {} \;| "the function name needed here" )

我只是不知道要使用什么函数调用,或者我将它们称为 Linux 中的小程序,大多数人对它们的存在知之甚少,而其他人则对如何使用它们有大量的了解。

答案1

您正在寻找的功能是wc(字数统计),带有选项 -l 来计算行数(即字母 l 而不是数字一)。

但是,您不需要 find 来完成此任务。做你想做的事的一种更简单的方法是:

TotalDir=$( ls -1d */ | wc -l )

请注意,它是 后面的数字 1ls和后面的字母 l wc

编辑:总结下面评论中的讨论,这里是对该解决方案如何工作的更多解释:

  • -1告诉ls只使用一列,这确保我们真正为每个子目录获取一行
  • -d告诉ls仅列出目录而不列出其内容(只需尝试带或不带 -d 的 ls */ 即可查看差异。
  • */告诉ls列出当前目录下的所有目录。/path/to/ParentDirectory/*/会告诉ls列出下面的所有目录/path/to/ParentDirectory/
  • 最后,wc -l计算命令输出的行数ls,该命令(使用上面解释的参数)正是子目录的数量。

相关内容