shell遍历文件夹 - 如何使用bash显示有两个子文件夹的文件夹?



awk (3)

有一个了不起的开源工具,将做你想要的。 它被称为“树”,它有很多有用的选项。 它包含在大多数Linux发行版中,但是您应该可以编译Cygwin。

你可以在http://mama.indstate.edu/users/ice/tree/找到“tree”。

你也可以用Perl来做到这一点。 这将比Bash shell脚本更灵活。 使用Perl中的File :: Find模块( http://perldoc.perl.org/File/Find.html ),这将允许你轻松地做你想做的事情。 你的Cygwin环境中安装了Perl吗? 你知道Perl吗? 让我知道如果你想我发布一个Perl脚本来做到这一点。

我通过Cygwin使用bash。 我有一个大文件夹(一),与许多子文件夹(二)。 这些子文件夹每个都有一个或两个子文件夹(c)。 我想找到所有有两个子文件夹(c)的子文件夹(b)并输出它们。

结构如下:

a
 b1
  c1 
 b2
  c1
  c2
 b3
  c1
  c2

到目前为止,我只知道如何使用find和pipe来输出主文件夹(a)中的所有子文件夹。

find . -type d > folders.txt

我怎样才能只有一个文件夹每行输出具有两个c文件夹的所有b文件夹到文本文件? (在我的例子中,输出应该是:

b2
b3

试试这个bash脚本 -

#!/bin/bash

cd a
for i in `pwd`/* ; do
  if [ -d "$i" ]; then
    DIR=0;
    cd $i;
    for j in * ; do
    if [ -d "$j" ]; then
    let DIR=DIR+1;
    fi
    done
    if [ $DIR -eq 2 ]; then
    echo $i;
    fi
  fi
done

假设脚本的名字是test.sh ,你可以这样做

$./test.sh > folder.txt

有一个更简单的解决方案,利用父目录链接..从每个子目录链接计数的目录链接数增加1。一个没有子目录的目录有一个链接计数为2( .和从其链接自己的父母的名字)。 因此,一个有两个子目录的目录的链接数为4:

find . -type d -links 4

将其他硬链接到目录是不合法的,所以不应该有误报。





awk