Điểm:0

Làm cách nào để liệt kê tất cả các tệp ASCII có trong một thư mục?

lá cờ mx

Tôi muốn liệt kê tất cả các tệp ASCII không có phần mở rộng (.txt) trong thư mục làm việc hiện tại của tôi (nhà). tôi bắt đầu với ls lệnh trong thiết bị đầu cuối nhưng tôi không biết mình nên đặt gì trong các tùy chọn vì tôi muốn liệt kê các tệp không có phần mở rộng mà chỉ có tên. Tôi phải làm nó như thế nào?

Điểm:6
lá cờ cn

Chạy lệnh sau:

tìm thấy . -maxdepth 1 -loại f ! -name "*.*" -exec grep -lvIP '[^[:ascii:]]' {} +
  • tìm thấy là một mạnh mẽ hơn ls.
  • . -độ sâu tối đa 1 có nghĩa là chỉ thư mục hiện tại
  • -loại f có nghĩa là chỉ tập tin
  • ! -Tên "*.*" có nghĩa là loại trừ các tệp có phần mở rộng
  • -exec grep...{} + có nghĩa là lọc danh sách các tệp thông qua tiếng kêu chỉ huy
  • -lvIP '[^[:ascii:]]' có nghĩa là chỉ hiển thị các tập tin -l mà không chứa -v bất kỳ không (^)-ascii ký tự và cũng không chứa dữ liệu nhị phân (-TÔI). Perl-cú pháp -P bắt buộc phải sử dụng [:ascii:] lớp ký tự trong mẫu.
Điểm:4
lá cờ cn

Trong Linux, bất kỳ tệp nào cũng có thể có bất kỳ nội dung nào. Vì vậy, một tập tin có tên a.txt cũng có thể chứa ảnh JPEG và tệp có tên phần sụn.bin cũng có thể chứa văn bản ASCII.

Nếu bạn quan tâm đến nội dung của các tệp (chứa "văn bản ASCII") cũng như tên của các tệp (không chứa . trong tên tệp), đề xuất của @vanadium trong bình luận của câu trả lời khác có thể được cải thiện như thế này:

tìm thấy . -maxdepth 1 -loại f ! -tên "*.*" -exec file -0 {} \; | \
  grep -Pa "\0.*Văn bản ASCII.*$"

* Lệnh này thực hiện đúng không phải chọn tập tin "nhị phân" có văn bản ASCII trong tên của họ.

để có được chỉ danh sách tên tập tin phù hợp, thêm đường ống | grep -Pao '^[^\0]*' đến cuối lệnh đã cho ở trên.

Điểm:0
lá cờ in

Điều này có thể được thực hiện với tìm thấy:

tìm thấy . -maxdepth 1 -loại f ! -Tên "*.*"

Lưu ý rằng ! có nghĩa KHÔNG PHẢI, vì vậy sẽ xóa mọi kết quả có chứa ..

vanadium avatar
lá cờ cn
Điều này sẽ liệt kê các tệp * tất cả * không có phần mở rộng, không chỉ các tệp văn bản ASCII như OP yêu cầu. Mục đích của OP dường như là truy xuất tất cả các tệp ASCII, ngay cả khi chúng không có phần mở rộng.
vanadium avatar
lá cờ cn
Có thể trở thành `tìm. -maxdepth 1 -loại f ! -tên "*.*" -exec file {} \; | grep "ASCII text"` để chỉ tìm các tệp ASCI mà không có phần mở rộng
FedKad avatar
lá cờ cn
@vanadium Đây không phải là một giải pháp hoàn hảo, vì nó sẽ khớp các tệp không phải ASCII với `Văn bản ASCII` trong một phần tên của chúng. Tuy nhiên, OP không rõ ràng khi nói về "tệp ASCII".
skekmal avatar
lá cờ mx
@FedonKadifeli Bạn có thể giải thích thêm về việc tôi không biết về các tệp ASCII không? Có các loại tệp ASCII khác nhau mà chúng tôi có thể sử dụng ở đây để thu hẹp tìm kiếm không?
FedKad avatar
lá cờ cn
@skekmal Trong Linux, bất kỳ tệp nào cũng có bất kỳ nội dung nào. Vì vậy, tệp có tên `a.txt` có thể chứa ảnh JPEG và tệp có tên `firmware.bin` có thể chứa văn bản ASCII. Nếu bạn quan tâm đến nội dung của các tệp cũng như tên của các tệp, đề xuất của @vanadium có thể được cải thiện như sau: `find . -maxdepth 1 -loại f ! -tên "*.*" -exec file -0 {} \; | grep -Pa "\0.*ASCII text"`
vanadium avatar
lá cờ cn
@FedonKadifeli đó là lý do tại sao tôi không viết ra dưới dạng câu trả lời đầy đủ

Đă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.