Điểm:4

Count number of files with specific extension(s) for each subdirectory

lá cờ mx

Source: Any directory tree with any number and type of files. Q: How many .jpg or .jpg and .png (for example) are in each subdirectory?

How can I limit the code below for files with 1 or more specific extension(s)? Having trouble inserting the -type f -name "*.jpg*", for example.

for DIR in $(find . -maxdepth 99 -type d)
do
    printf "%10d\t%s\n" $(find ${DIR}|wc -l) "${DIR}" 
done

Desired output:

118   ./aaa
 73   ./aaa/bbb
 16   ./aaa/bbb/ccc

If more than one file types are counted, then their combined total number in each subdirectories should be displayed.

Liso avatar
lá cờ sd
Bạn có muốn kết hợp kết quả của `.jpg` và `.png` không?
Điểm:4
lá cờ cn

Có lẽ điều này tìm thấy|xargs giải pháp sẽ hoạt động khi bạn cần.

tìm thấy . -mindepth 1 -maxdepth 99 -type d -print0 | \
   xargs -0 -i bash -c 'printf "%10d\t%s\n" "$(find "$1" -maxdepth 1 -type f -regextype awk -iregex ".*\.(jpg|jpeg|png) " | wc -l)" "$1"' - '{}'

Một số giải thích:

  • Các -tối thiểu 1 tùy chọn được thêm vào để bỏ qua thư mục hiện tại và chỉ xử lý các thư mục con.
  • Các -print0 cung cấp các mục đầu ra với dấu phân cách null, nó hoạt động cùng với -0 tùy chọn của xargs.
  • tùy chọn - "{}" cuối cùng sẽ vượt qua xargs đối số làm giá trị của tham số vị trí đầu tiên $1 của lệnh bash.
  • Trong vòng thứ hai tìm thấy chỉ huy -iregex có nghĩa là biểu thức chính quy không phân biệt chữ hoa chữ thường (bạn có thể sử dụng -regex thay thế).
user3026965 avatar
lá cờ mx
thanh lịch! có cách nào dễ dàng để chặn việc liệt kê các thư mục con có số đếm = 0 không? (ví dụ: không có tệp nào khớp với `*\.(jpg|jpeg|png)"`).
pa4080 avatar
lá cờ cn
Xin chào, @ user3026965, cách dễ nhất để chặn những dòng này là thêm `| grep -Pv '^\s+0'` ở cuối lệnh. Tùy chọn `-P` cho phép các biểu thức chính quy mở rộng, `-v` chặn các dòng phù hợp và bản thân biểu thức chính quy có nghĩa là một dòng bắt đầu `^` bằng một hoặc nhiều khoảng trắng `+` `\s` theo sau là `0`.
Điểm:3
lá cờ sd

Đây là từ của tôi, được sửa đổi từ câu trả lời này.

tìm thấy . -maxdepth 100 -type d -print0 | trong khi đọc -d '' -r dir; làm đếm=$(tìm "$dir" -maxdepth 1 -type f \( -name '*.jpg' -o -name '*.png' \) -ls | wc -l); printf "%5d %s\n" "$count" "$dir"; xong

Trả lại cái này trên thư mục thử nghiệm của tôi.

20 .
11 ./cấp2
3 ./cấp2/cấp3

Nội dung ở đâu:

$ cây -L 3 cấp1/
cấp độ 1/
âââ 1.png
âââ 10.png
âââ 11.png
âââ 12.png
âââ 13.png
âââ 14.png
âââ 15.png
âââ 16.jpg
âââ 17.jpg
âââ 18.jpg
âââ 19.jpg
âââ 2.png
âââ 20.jpg
âââ 3.png
âââ 4.png
âââ 5.png
âââ 6.png
âââ 7.png
âââ 8.png
âââ 9.png
âââ cấp2
    âââ 20.jpg
    âââ 21.jpg
    âââ 22.jpg
    âââ 23.jpg
    âââ 24.jpg
    âââ 25.jpg
    âââ 26.png
    âââ 27.png
    âââ 28.png
    âââ 29.png
    âââ 30.png
    âââ cấp3
        âââ bull_city.png
        âââ man_city.png
        âââ newyork_city.png

2 thư mục, 34 tập tin

tìm thấy . -mindepth 1 -maxdepth 100 -type d -print0 | trong khi đọc -d '' -r dir; làm đếm=$(tìm "$dir" -maxdepth 1 -type f \( -name '*.jpg' -o -name '*.png' \) -ls | wc -l); printf "%5d %s\n" "$count" "$dir"; xong

Trả lại cái này.

11 ./cấp2
3 ./cấp2/cấp3
Điểm:1
lá cờ it

Tìm có các toán tử logic như AND, NOT và OR.

Để chỉ định nhiều tiện ích mở rộng để tìm kiếm, bạn cần đặt các đối số trong dấu ngoặc đơn, cũng như thoát khỏi dấu ngoặc đơn để tránh chúng bị bash xử lý:

tìm thấy . \( -type f -name "*.jpg" -o -name "*.png" \)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.