Lệnh tìm độ dài tệp / đường dẫn quá dài để ghi vào DVD?


7

Tôi đang cố ghi DVD từ Windows nhưng không thành công vì độ dài tên đường dẫn đầy đủ vượt quá giới hạn của khoảng 255 ký tự.

Các tệp của chúng tôi được lưu trữ trong Debian Linux (được Windows truy cập bằng samba), vì vậy để tránh chạy một số ứng dụng Windows tinh ranh để tìm tên đường dẫn dài tôi muốn tìm chúng bằng lệnh Linux.

Lệnh nào tôi có thể chạy để xuất danh sách các đường dẫn và tên tệp tương đối cho một thư mục nhất định, được sắp xếp theo độ dài của mỗi (theo thứ tự giảm dần)?

Đầu ra sẽ trông giống như thế này:

92 ./site/testapidocs/wjhk/jupload2/policies/class-use/DefaultUploadPolicy_WithoutAlertBox.ht
83 ./site/testapidocs/wjhk/jupload2/upload/class-use/PacketConstructionThreadTest.html
76 ./site/apidocs/wjhk/jupload2/upload/helper/class-use/ProgressBarManager.html
52 ./site/xref/wjhk/jupload2/gui/JUploadFileFilter.html
31 ./site/samples.java/applet.jnlp
17 ./site/index.html

Câu trả lời:


18

Với GNU find (trên Linux hoặc Cygwin), bạn có thể tìm các tệp có đường dẫn tương đối dài hơn 255 ký tự:

find -regextype posix-extended -regex '.{257,}'

(257 tài khoản ban đầu ./.)


Hữu ích! Dường như cũng có một hạn chế (ít nhất là trong Windows) rằng khi ghi DVD, không có tên tệp (hoặc tên thư mục?) Có thể dài hơn 106 ký tự. Một sửa đổi nhỏ cho regex của bạn cũng sẽ tìm thấy những trường hợp đó. Cảm ơn
Rất bất thường

1
Trên máy Mac, bạn có thể sử dụng tích hợp find -E . -regex ".{255,}"để liệt kê các đường dẫn tương đối> = 253 ký tự. 255 là số lần lặp lại tối đa được hỗ trợ bởi công cụ RegEx tích hợp.
DKroot

7

Tôi tìm thấy 2 cách để làm điều này:

find . | perl -pe 'print (length($_)-1)." ";' | sort -rn | less
find . | awk '{print length,$0}' | sort -rn | less

Lần thử đầu tiên của tôi ( tìm. | Perl -pe 'in length;' | sort -rn | less ) tại lệnh sử dụng perl đã báo cáo số lượng ký tự quá cao bởi một, vì tôi nghĩ nó bao gồm một ký tự dòng mới trong số đếm của nó? Nó có thể được thực hiện sạch hơn phương pháp trên của tôi, nhưng tôi đã nhận được kết quả tôi cần.


1
Thực sự nỗ lực perl đầu tiên của bạn bao gồm dòng mới. Bạn có thể viết perl -l -pe 'print length': -llàm cho perl tự động loại bỏ ký tự dòng mới.
Gilles 'SO- ngừng trở nên xấu xa'
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.