我有一个脚本,列出特定目录中的所有文件,并每周向我发送一次邮件。 但我希望有一个比这更好的列表;
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
答案 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