Tôi đã tìm thấy câu hỏi này sau r Tôi đã tìm ra kịch bản tương tự của riêng mình. Nó có vẻ phù hợp với điều kiện của bạn và rất linh hoạt vì vậy tôi nghĩ rằng tôi muốn thêm nó như là một câu trả lời.
Ưu điểm:
- thể được nhóm lại để bất kỳ độ sâu (0 cho
.
, 1 thư mục con cấp độ đầu tiên, vv)
- in ra khá
- không vòng lặp, và chỉ có một
find
lệnh, vì vậy đó là một chút nhanh hơn trên các thư mục lớn
- vẫn có thể được điều chỉnh để thêm các bộ lọc tùy chỉnh (maxdepth để làm cho nó không đệ quy, tên file mẫu)
mã thô:
find -P . -type f | rev | cut -d/ -f2- | rev | \
cut -d/ -f1-2 | cut -d/ -f2- | sort | uniq -c
bọc vào một chức năng và giải thích:
fc() {
# Usage: fc [depth >= 0, default 1]
# 1. List all files, not following symlinks.
# (Add filters like -maxdepth 1 or -iname='*.jpg' here.)
# 2. Cut off filenames in bulk. Reverse and chop to the
# first/(remove filename). Reverse back.
# 3. Cut everything after the specified depth, so that each line
# contains only the relevant directory path
# 4. Cut off the preceeding '.' unless that's all there is.
# 5. Sort and group to unique lines with count.
find -P . -type f \
| rev | cut -d/ -f2- | rev \
| cut -d/ -f1-$((${1:-1}+1)) \
| cut -d/ -f2- \
| sort | uniq -c
}
Tạo đầu ra như thế này:
$ fc 0
1668 .
$ fC# depth of 1 is default
6 .
3 .ssh
11 Desktop
44 Downloads
1054 Music
550 Pictures
Tất nhiên với số đầu tiên nó có thể được đường ống để sort
:
$ fc | sort
3 .ssh
6 .
11 Desktop
44 Downloads
550 Pictures
1054 Music
Để người bình chọn gần: bash là một ngôn ngữ thực tế . – Bernard