bash中文件列表的良好输出

时间:2013-10-02 18:24:16

标签: linux bash find list

我有一个脚本,列出特定目录中的所有文件,并每周向我发送一次邮件。 但我希望有一个比这更好的列表;

folder/subfolder/file1.avi
folder/subfolder/file2.avi
..
folder5/subfolder34/file52.mov

有一种简单的方法吗?我今天的bashline: find /volume2/Disk2 -type f \( -iname "*.avi" -o -iname "*.m*v" -o -iname "*.iso" -o -iname "*.mp*" \) | sort -do /tmp/$DATE-filmer.txt

我想要的是这样的东西;

folder1/
  File1.avi
  File2.mov
Folder4
  Subfolder1
    File12.mov

2 个答案:

答案 0 :(得分:4)

使用tree命令可以非常轻松地执行此类操作,该命令默认安装在许多系统上或大多数软件包存储库中都可用:

$ tree -P "*.mp*|*.avi"
.
├── foo
│   ├── bar
│   │   └── movie.avi
│   ├── some.avi
│   └── something.mp3
└── zot.mp4

没有过滤器:

$ tree
.
├── foo
│   ├── bar
│   │   └── movie.avi
│   ├── some.avi
│   ├── something.doc
│   └── something.mp3
├── something.txt
└── zot.mp4

答案 1 :(得分:1)

export dir=''; export prefix='  ';
find /volume2/Disk2 -type f \( -iname "*.avi" -o -iname "*.m*v" -o -iname "*.iso" -o -iname "*.mp*" \) |
while read file; do \
  if [ ! "$dir" == "$(dirname $file)" ]; then \
    export dir="$(dirname $file)";
    slashes=$(echo "$dir" | sed 's#[^/]##g' | wc -c);
    export prefix='';
    for (( i=1; i<$slashes; i++ )); do \
      export prefix="$prefix  ";
    done;
    echo "$prefix$dir/";
    export prefix="$prefix  ";
  fi;
  echo "$prefix$(basename $file)";
done

随机CPAN目录上的示例输出摘录:

  ./.cpan/build/Sub-Uplevel-0.24-GduPEf/
    Makefile
    dist.ini
    META.json
    perlcritic.rc
    README.PATCHING
    META.yml
    Makefile.PL
      ./.cpan/build/Sub-Uplevel-0.24-GduPEf/blib/bin/
        .exists
        ./.cpan/build/Sub-Uplevel-0.24-GduPEf/blib/lib/Sub/
          Uplevel.pm
          .exists
            ./.cpan/build/Sub-Uplevel-0.24-GduPEf/blib/lib/auto/Sub/Uplevel/
              .exists
      ./.cpan/build/Sub-Uplevel-0.24-GduPEf/blib/script/
        .exists
      ./.cpan/build/Sub-Uplevel-0.24-GduPEf/blib/man1/
        .exists
      ./.cpan/build/Sub-Uplevel-0.24-GduPEf/blib/arch/
        .exists
            ./.cpan/build/Sub-Uplevel-0.24-GduPEf/blib/arch/auto/Sub/Uplevel/
              .exists
      ./.cpan/build/Sub-Uplevel-0.24-GduPEf/blib/man3/
        Sub::Uplevel.3pm
        .exists