Đếm các tệp trong thư mục Linux


728

Làm cách nào tôi có thể đếm đệ quy các tệp trong thư mục Linux?

Tôi đã tìm thấy cái này:

find DIR_NAME -type f ¦ wc -l

Nhưng khi tôi chạy nó sẽ trả về lỗi sau.

tìm: đường dẫn phải đi trước biểu thức:


64
Bạn đang nhầm lẫn thanh bị hỏng ¦(ASCII 166) với thanh dọc |(ASCII 124) được sử dụng cho đường ống UNIX .
Skippy le Grand Gourou

7
@SkippyleGrandGourou Không phải nó được gọi là đường ống sao?
DaveStephens

27
@DaveStephens Vâng, nó cũng được gọi như vậy. Nó cũng được gọi là đột quỵ Sheffer, verti-bar, vbar, stick, line dọc, slash dọc, bar, obelisk, glidus.
emlai

64
@zenith Tôi chỉ gọi nó là Bob.
Christopher

15
Trong RFC20, nó được gọi là "đường thẳng đứng". "Ống" là tên của toán tử shell, chứ không phải là tên của ký hiệu. Cũng giống như *ký tự ASCII "dấu hoa thị", nhưng "lần" trong một số bối cảnh khác.
mỏng

Câu trả lời:


1327

Điều này sẽ làm việc:

find DIR_NAME -type f | wc -l

Giải trình:

  • -type f chỉ bao gồm các tập tin.
  • |( và không¦ ) chuyển hướng findđầu ra wctiêu chuẩn của lệnh sang đầu vào tiêu chuẩn của lệnh.
  • wc(viết tắt của đếm từ) đếm các dòng mới, từ và byte trên đầu vào của nó ( tài liệu ).
  • -l để chỉ đếm dòng mới.

Ghi chú:

  • Thay thế DIR_NAMEbằng .để thực thi lệnh trong thư mục hiện tại.
  • Bạn cũng có thể loại bỏ các -type fthư mục để bao gồm (và liên kết tượng trưng) trong số đếm.
  • Có thể lệnh này sẽ vượt qua nếu tên tệp có thể chứa các ký tự dòng mới.

Giải thích tại sao ví dụ của bạn không hoạt động:

Trong lệnh bạn đã hiển thị, bạn không sử dụng "ống" ( |) để kết nối hai lệnh, nhưng thanh bị hỏng ( ¦) mà trình bao không nhận ra đó là lệnh hoặc thứ gì đó tương tự. Đó là lý do tại sao bạn nhận được thông báo lỗi đó.


27
Các ftrong -type flà viết tắt của tập tin và wc -lcho dòng số từ.
Serge Stroobandt

3
Xóa các -type fthư mục để bao gồm trong số đếm
phatblat

3
Không cần -printcờ
Zoltán

3
Nếu có bất kỳ khả năng nào tên tệp chứa ký tự dòng mới, bạn có thể muốn sử dụng -print0cờ.
gaboroncancio

2
@gaboroncancio Điều đó sẽ không hữu ích, trừ khi một số triển khai wccó tùy chọn đọc danh sách kết thúc null. Xem câu trả lời của tôi cho một sự thay thế.
Phục hồi Monica Vui lòng

100

Đối với thư mục hiện tại:

find -type f | wc -l

5
Giải pháp này không đưa tên tệp có chứa dòng mới vào tài khoản.
Kusalananda

2
Đối với thư mục hiện tại, bạn thậm chí không cần.
baptx

1
Trên thực tế, trên một số nền tảng, bạn làm cần phải giải thích rõ ràngfind .
tripleee

1
@Kusalanandra Nhận xét của bạn áp dụng cho hầu hết mọi câu trả lời ở đây.
tripleee

69

Nếu bạn muốn phân tích có bao nhiêu tệp trong mỗi thư mục theo thư mục hiện tại của bạn:

for i in */ .*/ ; do 
    echo -n $i": " ; 
    (find "$i" -type f | wc -l) ; 
done

Điều đó có thể đi tất cả trên một dòng, tất nhiên. Dấu ngoặc đơn làm rõ mà đầu ra wc -lđược cho là đang xem ( find $i -type ftrong trường hợp này).


7
Nó có thể bị kẹt trên các thư mục có khoảng trắng trong tên của họ. Thay đổi dòng đầu tiên để find . -maxdepth 1 -type d -print0 | while IFS= read -r -d '' i ; dosửa nó. Xem Làm cách nào tôi có thể đọc một tệp (luồng dữ liệu, biến) theo từng dòng (và / hoặc từng trường)?
Arch Stanton

4
Sử dụng findcho các vòng lặp bên ngoài chỉ là một biến chứng không cần thiết. for i in */; do`
tripleee

hàm Countit {cho i bằng $ (tìm. -maxdepth 1 -type d); làm file_count = $ (tìm $ i -type f | wc -l); tiếng vang "$ file_count: $ i"; làm xong }; đếm | sort -n -r
Schneems 12/12/18

Cuối cùng đây là những gì tôi cần. Các thư mục của tôi có hàng ngàn tệp vì vậy in chúng bằng cây hoặc bất cứ thứ gì khác không phải là một lựa chọn
lesolorzanov

Điều này bao gồm ../ và dường như không đi tiếp - có nghĩa là nó không thoái lui.
Daniel Lefebvre

50

Bạn có thể dùng

$ tree

Sau khi cài đặt gói cây với

$ sudo apt-get install tree

(trên máy Debian / Mint / Ubuntu Linux).

Lệnh không chỉ hiển thị số lượng tập tin mà còn cả số lượng thư mục riêng biệt. Tùy chọn -L có thể được sử dụng để chỉ định mức hiển thị tối đa (theo mặc định, là độ sâu tối đa của cây thư mục).

Các tập tin ẩn cũng có thể được bao gồm bằng cách cung cấp -atùy chọn.


4
Đây thực sự là cách đơn giản nhất để xem số lượng thư mục và tập tin.
Lorem Ipsum Dolor

11
Từ trang man: Theo mặc định, cây không in các tệp ẩn . Bạn phải cung cấp -atùy chọn để bao gồm chúng.
eee

3
Để cài đặt cái này trên macOS, hãy sử dụng brewvà chạy brew install tree, tốt nhất là sau khi chạy brew update.
Ashish Ahuja

4
Nó cũng in tất cả tên tệp, vì vậy sẽ chậm nếu bạn có nhiều tệp.
Franck Dernoncourt

2
Wow, công cụ rất hay, nó có thể in các thư mục được tô màu, chỉ liệt kê các thư mục, xuất ra dưới dạng JSON. Nó có thể liệt kê 34k thư mục và 51k tệp trong vài giây. Ôi!
brasofilo

46

Trên máy tính của tôi, rsyncnhanh hơn một chút so với find | wc -lcâu trả lời được chấp nhận:

$ rsync --stats --dry-run -ax /path/to/dir /tmp

Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes

Dòng thứ hai có số lượng tệp, 150.481 trong ví dụ trên. Là một phần thưởng, bạn cũng có được tổng kích thước (tính bằng byte).

Nhận xét:

  • dòng đầu tiên là một số tập tin, thư mục, symlink, v.v ... tất cả cùng nhau, đó là lý do tại sao nó lớn hơn dòng thứ hai.
  • các --dry-run(hoặc -ntùy chọn cho ngắn) là rất quan trọng để không thực sự chuyển các tập tin!
  • Tôi đã sử dụng -xtùy chọn "không vượt qua ranh giới hệ thống tập tin", có nghĩa là nếu bạn thực thi nó /và bạn có các ổ cứng gắn ngoài, nó sẽ chỉ đếm các tệp trên phân vùng gốc.

Tôi thích ý tưởng của bạn về việc sử dụng rsync ở đây. Tôi chưa bao giờ nghĩ về nó!
Qeole

Cảm ơn @Qeole, ý tưởng không phải là của tôi. Tôi đã đọc nó vài năm trước ở đâu đó rằng rsync là cách nhanh nhất để xóa một thư mục có nhiều tệp và thư mục con, vì vậy tôi nghĩ rằng nó cũng có thể nhanh chóng để đếm các tệp.
thợ rèn

1
Đã thử điều này. Sau khi chạy cả hai lần trước để điền vào bộ đệm fs, find ~ -type f | wc -lmất 1,7 / 0,5 / 1,33 giây (real / user / sys). rsync --stats --dry-run -ax ~ /xxxmất 4,4 / 3,1 / 2,1 giây. Đó là cho khoảng 500.000 tệp trên SSD.
mỏng

Bạn đã sử dụng phiên bản rsync nào, nhưng trong 3.1.2, nó dễ đọc hơn một chút:Number of files: 487 (reg: 295, dir: 192)
mở

Tôi đã sử dụng rsync mặc định trên macOS:rsync version 2.6.9 protocol version 29
psmith

20

Vì tên tệp trong UNIX có thể chứa dòng mới (vâng, dòng mới), wc -lcó thể đếm quá nhiều tệp. Tôi sẽ in một dấu chấm cho mỗi tệp và sau đó đếm số chấm:

find DIR_NAME -type f -printf "." | wc -c

1
Có vẻ như đây là giải pháp duy nhất xử lý các tệp có dòng mới trong tên của chúng. Nâng cao.
codeforester

2
hihi :) Tôi thích dòng mới trong tên tập tin. Điều đó làm cho chúng dễ đọc hơn.
hek2mgl

Ý tôi là, dòng mới trong tên tệp không phải là nội dung!
codeforester

1
Tôi chỉ nói đùa ... Vâng, những dòng mới trong tên tập tin luôn phải được tính đến. Chúng có thể đến từ nội dung độc hại hoặc ít ngoạn mục hơn, từ một lỗi đánh máy.
hek2mgl

18

Kết hợp một số câu trả lời ở đây với nhau, giải pháp hữu ích nhất dường như là:

find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} sh -c 'echo -e $(find "{}" -printf "\n" | wc -l) "{}"' |
sort -n

Nó có thể xử lý những thứ kỳ lạ như tên tệp bao gồm dấu ngoặc đơn và thậm chí cả dòng mới. Nó cũng sắp xếp đầu ra theo số lượng tập tin.

Bạn có thể tăng số lượng sau -maxdepthđể có được thư mục phụ được tính quá. Hãy nhớ rằng điều này có thể có khả năng mất nhiều thời gian, đặc biệt nếu bạn có cấu trúc thư mục được lồng cao kết hợp với -maxdepthsố lượng cao .


Có chuyện gì với echo -e? Tôi đoán bạn đặt nó vào để gấp bất kỳ dòng mới nào, nhưng nó cũng sẽ xử lý bất kỳ khoảng trắng bất thường nào khác và cố gắng mở rộng bất kỳ ký tự đại diện nào có trong nguyên văn tên của tệp. Tôi chỉ đơn giản là đi với một cái gì đó giống như find .* * -type d -execdir sh -c 'find . -type f -printf "\n" | wc -l; pwd'và sống với bất kỳ quang sai nào ở đầu ra, hoặc có thể chơi với Bash printf "%q"để in tên thư mục.
tripleee

10

Nếu bạn muốn biết có bao nhiêu tệp và thư mục con tồn tại từ thư mục làm việc hiện tại, bạn có thể sử dụng lớp lót này

find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n

Điều này sẽ hoạt động trong hương vị GNU và chỉ cần bỏ qua -e từ lệnh echo cho BSD linux (ví dụ OSX).


2
Giải pháp tuyệt vời! Vấn đề duy nhất tôi tìm thấy là các thư mục có khoảng trắng hoặc ký tự đặc biệt. Thêm dấu ngoặc kép trong đó tên thư mục được sử dụng:find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find "{}" | wc -l) "{}"' | sort -n
John Kary

1
Tôi đã sửa đổi nó một chút và nó hoạt động khá tốt đối với tôi:find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo $(find {} | wc -l) \\t {}' | sort -rn | less
Wizek

Nhận xét của tôi về câu trả lời của @ Sebastian cũng áp dụng ở đây. Việc sử dụng echo -e(hoặc chỉ `echo` như trong bình luận trước) trên một tên thư mục không được trích dẫn giao dịch một vấn đề khác.
tripleee

8

Nếu bạn muốn tránh các trường hợp lỗi, không cho phép wc -lxem các tệp có dòng mới (sẽ được tính là 2+ tệp)

ví dụ: Hãy xem xét trường hợp chúng ta có một tệp có một ký tự EOL duy nhất trong đó

> mkdir emptydir && cd emptydir
> touch $'file with EOL(\n) character in it'
> find -type f
./file with EOL(?) character in it
> find -type f | wc -l
2

Vì ít nhất gnu wcdường như không có tùy chọn để đọc / đếm danh sách kết thúc null (ngoại trừ từ tệp), giải pháp đơn giản nhất là không truyền tên tệp, nhưng đầu ra tĩnh mỗi khi tìm thấy tệp, ví dụ: trong cùng thư mục như trên

> find -type f -exec printf '\n' \; | wc -l
1

Hoặc nếu bạn findhỗ trợ nó

> find -type f -printf '\n' | wc -l
1 

7

Bạn có thể sử dụng lệnh ncdu. Nó sẽ đệ quy đếm xem có bao nhiêu tệp trong thư mục Linux. Dưới đây là một ví dụ về đầu ra:

nhập mô tả hình ảnh ở đây

Nó có một thanh tiến trình, thuận tiện nếu bạn có nhiều tệp:

nhập mô tả hình ảnh ở đây

Để cài đặt nó trên Ubuntu:

sudo apt-get install -y ncdu

Điểm chuẩn: Tôi đã sử dụng https://archive.org/details/cv_corpus_v1.tar (380390 tệp, 11 GB) làm thư mục mà người ta phải đếm số lượng tệp.

  • find . -type f | wc -l: khoảng 1m20 để hoàn thành
  • ncdu: khoảng 1m20 để hoàn thành

Điều đó chủ yếu tính toán việc sử dụng đĩa, không phải số lượng tệp. Chi phí bổ sung này có thể không muốn. (bên cạnh nhu cầu cài đặt gói bổ sung cho những thứ có thể được thực hiện với các tiện ích POSIX tiêu chuẩn)
hek2mgl

@ hek2mgl Nó tính toán số lượng tệp, như được hiển thị màu đỏ trong ảnh chụp màn hình đầu tiên. Tôi mất vài phút cho ~ 2 triệu tệp, vì vậy tốc độ không quá tệ.
Franck Dernoncourt

2
@ hek2mgl Tôi đã thêm một điểm chuẩn có thể lặp lại trong câu trả lời, tôi đã chạy nó hai lần và tôi không thấy bất kỳ sự khác biệt nào giữa find . -type f | wc -lncdu.
Franck Dernoncourt

2
vâng, có vẻ như findlà dưới mui xe thực hiện ít nhiều các cuộc gọi hệ thống tương tự như dulà phụ trợ cho ncdu. Chỉ cần sải bước chúng.
hek2mgl

1
@FranckDernoncourt rất thích nó. Tôi đã tấn rất nhiều tệp trong một thư mục và có một thanh tiến trình là trình bảo vệ cuộc sống. Cám ơn vì đã chia sẻ!
Geek


4

Để xác định có bao nhiêu tệp trong thư mục hiện tại, hãy đặt vào ls -1 | wc -l. Điều này sử dụng wcđể thực hiện đếm số lượng dòng (-l)trong đầu ra của ls -1. Nó không tính dotfiles. Xin lưu ý rằng ls -l(đó là "L" chứ không phải là "1" như trong các ví dụ trước) mà tôi đã sử dụng trong các phiên bản trước của HOWTO này sẽ thực sự cung cấp cho bạn số lượng tệp lớn hơn số lượng thực tế. Cảm ơn Kam Nejad cho điểm này.

Nếu bạn chỉ muốn đếm các tệp và KHÔNG bao gồm các liên kết tượng trưng (chỉ là một ví dụ về những gì bạn có thể làm), bạn có thể sử dụng ls -l | grep -v ^l | wc -l(đó là "L" không phải là "1" lần này, chúng tôi muốn có một danh sách "dài" ở đây) . grepkiểm tra bất kỳ dòng nào bắt đầu bằng "l" (chỉ ra một liên kết) và loại bỏ dòng đó (-v).

Tốc độ tương đối: "ls -1 / usr / bin / | wc -l" mất khoảng 1,03 giây trên 486SX25 không tải (/ usr / bin / trên máy này có 355 tệp). " ls -l /usr/bin/ | grep -v ^l | wc -l" mất khoảng 1,19 giây.

Nguồn: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html


2
ls -lphải thực hiện statsallall trên mỗi tệp để đọc kích thước, mtime và các thuộc tính khác, chậm. Trên các thư mục lớn (hơn 100.000 tệp) đang chạy ls -lcó thể mất vài phút. Vì vậy, để chỉ đếm tập tin, luôn luôn sử dụng ls -1 | wc -l.
Marki555

A 486SX25, đẹp
cam8001

ls -1vẫn có thể chậm trong các thư mục lớn, vì nó phải sắp xếp các tệp. Đơn giản chỉ cần printf '%s\n' *làm điều tương tự và tránh lscuộc gọi bên ngoài ( dù sao cũng có vấn đề ) nhưng soluton hiệu quả nhất là sử dụng một lệnh không thực hiện bất kỳ sắp xếp nào, chẳng hạn như find. (Sản lượng toàn cầu được sắp xếp theo vỏ.)
tripleee

4

Nếu những gì bạn cần là đếm một loại tệp cụ thể theo cách đệ quy , bạn có thể làm:

find YOUR_PATH -name '*.html' -type f | wc -l 

-l chỉ để hiển thị số lượng dòng trong đầu ra.


Phần mở rộng là một phần của tên tệp và có thể không đại diện cho tệp TYPE
Waxhead

4

Với bash:

Tạo một mảng các mục với () và lấy số đếm bằng #.

FILES=(./*); echo ${#FILES[@]}

Ok điều đó không tính đệ quy các tập tin nhưng tôi muốn hiển thị tùy chọn đơn giản trước tiên. Một trường hợp sử dụng phổ biến có thể là để tạo các bản sao lưu cuộn qua của một tệp. Điều này sẽ tạo logfile.1, logfile.2, logfile.3, v.v.

CNT=(./logfile*); mv logfile logfile.${#CNT[@]}

Số đệ quy với bash 4+ globstarđược bật (như được đề cập bởi @tripleee)

FILES=(**/*); echo ${#FILES[@]}

Để có được số lượng tệp đệ quy, chúng ta vẫn có thể sử dụng find theo cùng một cách.

FILES=(`find . -type f`); echo ${#FILES[@]}

Vỏ hiện đại hỗ trợ **/*cho phép liệt kê đệ quy. Nó vẫn kém hiệu quả hơn so với findcác thư mục lớn vì shell phải sắp xếp các tệp trong mỗi thư mục.
tripleee

2

Đối với các thư mục có khoảng trắng trong tên ... (dựa trên các câu trả lời khác nhau ở trên) - in đệ quy tên thư mục với số lượng tệp trong:

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done

Ví dụ (được định dạng để dễ đọc):

pwd
  /mnt/Vancouver/Programming/scripts/claws/corpus

ls -l
  total 8
  drwxr-xr-x 2 victoria victoria 4096 Mar 28 15:02 'Catabolism - Autophagy; Phagosomes; Mitophagy'
  drwxr-xr-x 3 victoria victoria 4096 Mar 29 16:04 'Catabolism - Lysosomes'

ls 'Catabolism - Autophagy; Phagosomes; Mitophagy'/ | wc -l
  138

## 2 dir (one with 28 files; other with 1 file):
ls 'Catabolism - Lysosomes'/ | wc -l
  29

Cấu trúc thư mục được hiển thị tốt hơn bằng cách sử dụng tree:

tree -L 3 -F .
  .
  ├── Catabolism - Autophagy; Phagosomes; Mitophagy/
  │   ├── 1
  │   ├── 10
  │   ├── [ ... SNIP! (138 files, total) ... ]
  │   ├── 98
  │   └── 99
  └── Catabolism - Lysosomes/
      ├── 1
      ├── 10
      ├── [ ... SNIP! (28 files, total) ... ]
      ├── 8
      ├── 9
      └── aaa/
          └── bbb

  3 directories, 167 files

man find | grep mindep
  -mindepth levels
    Do not apply any tests or actions at levels less than levels
    (a non-negative integer).  -mindepth 1 means process all files
    except the starting-points.

ls -p | grep -v /(được sử dụng bên dưới) là từ câu trả lời 2 tại /unix/48492/list-only-THER-files-but-not-directories-in-civerse-directory

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done
./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
./Catabolism - Lysosomes: 28
./Catabolism - Lysosomes/aaa: 1

Ứng dụng: Tôi muốn tìm số lượng tệp tối đa trong số hàng trăm thư mục (tất cả độ sâu = 1) [đầu ra bên dưới một lần nữa được định dạng để dễ đọc]:

date; pwd
    Fri Mar 29 20:08:08 PDT 2019
    /home/victoria/Mail/2_RESEARCH - NEWS

time find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done > ../../aaa
    0:00.03

[victoria@victoria 2_RESEARCH - NEWS]$ head -n5 ../../aaa
    ./RNA - Exosomes: 26
    ./Cellular Signaling - Receptors: 213
    ./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
    ./Stress - Physiological, Cellular - General: 261
    ./Ancient DNA; Ancient Protein: 34

[victoria@victoria 2_RESEARCH - NEWS]$ sed -r 's/(^.*): ([0-9]{1,8}$)/\2: \1/g' ../../aaa | sort -V | (head; echo ''; tail)

    0: ./Genomics - Gene Drive
    1: ./Causality; Causal Relationships
    1: ./Cloning
    1: ./GenMAPP 2
    1: ./Pathway Interaction Database
    1: ./Wasps
    2: ./Cellular Signaling - Ras-MAPK Pathway
    2: ./Cell Death - Ferroptosis
    2: ./Diet - Apples
    2: ./Environment - Waste Management

    988: ./Genomics - PPM (Personalized & Precision Medicine)
    1113: ./Microbes - Pathogens, Parasites
    1418: ./Health - Female
    1420: ./Immunity, Inflammation - General
    1522: ./Science, Research - Miscellaneous
    1797: ./Genomics
    1910: ./Neuroscience, Neurobiology
    2740: ./Genomics - Functional
    3943: ./Cancer
    4375: ./Health - Disease 

sort -Vlà một loại tự nhiên. ... Vì vậy, số lượng tệp tối đa của tôi trong bất kỳ thư mục nào (Claws Mail) là 4375 tệp. Nếu tôi để lại pad ( https://stackoverflow.com/a/55409116/1904943 ) những tên tệp đó - chúng đều được đặt tên bằng số, bắt đầu bằng 1, trong mỗi thư mục - và đệm đến 5 chữ số, tôi sẽ ổn .


Phụ lục

Tìm tổng số tệp, thư mục con trong một thư mục.

$ date; pwd
Tue 14 May 2019 04:08:31 PM PDT
/home/victoria/Mail/2_RESEARCH - NEWS

$ ls | head; echo; ls | tail
Acoustics
Ageing
Ageing - Calorie (Dietary) Restriction
Ageing - Senescence
Agriculture, Aquaculture, Fisheries
Ancient DNA; Ancient Protein
Anthropology, Archaeology
Ants
Archaeology
ARO-Relevant Literature, News

Transcriptome - CAGE
Transcriptome - FISSEQ
Transcriptome - RNA-seq
Translational Science, Medicine
Transposons
USACEHR-Relevant Literature
Vaccines
Vision, Eyes, Sight
Wasps
Women in Science, Medicine

$ find . -type f | wc -l
70214    ## files

$ find . -type d | wc -l
417      ## subdirectories

1

Tôi đã viết ffcnt để tăng tốc độ đếm tệp đệ quy trong các trường hợp cụ thể: đĩa quay và hệ thống tệp hỗ trợ ánh xạ phạm vi.

Nó có thể là một thứ tự cường độ nhanh hơn lshoặc findtiếp cận dựa trên, nhưng YMMV.


0

Có rất nhiều câu trả lời đúng ở đây. Đây là một cái khác!

find . -type f | sort | uniq -w 10 -c

nơi .là thư mục để tìm trong và 10là số ký tự mà theo đó để nhóm các thư mục.


-1

tìm -type f | wc -l

HOẶC (Nếu thư mục là thư mục hiện tại)

tìm thấy . -type f | wc -l


Điều này trùng lặp ít nhất một câu trả lời khác cho cùng câu hỏi này.
Kusalananda

-1

Điều này sẽ hoạt động hoàn toàn tốt. Đơn giản ngắn. Nếu bạn muốn đếm số lượng tập tin có trong một thư mục.

ls | wc -l

3
Trước hết, điều này không trả lời câu hỏi. Câu hỏi là về việc đếm đệ quy các tệp từ một thư mục chuyển tiếp và lệnh bạn hiển thị không làm điều đó. hơn nữa, với ls bạn đang đếm các thư mục cũng như các tập tin. Ngoài ra, không có lý do để trả lời một câu hỏi cũ nếu bạn sẽ không thêm bất cứ điều gì mới và thậm chí sẽ không đọc câu hỏi đúng cách. Xin vui lòng không làm như vậy.
XFCC

-1

Cách tiếp cận thay thế này với tính năng lọc định dạng sẽ đếm tất cả các mô-đun hạt nhân có sẵn:

ls -l /boot/grub/*.mod | wc -l

-3
ls -l | grep -e -x -e -dr | wc -l 
  1. danh sách dài
  2. tập tin lọc và thư mục
  3. đếm dòng đã lọc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.