Điểm:5

cách sử dụng đối số dòng lệnh để tìm tệp .txt có tên chung

lá cờ us

Tôi có nhiều tệp trong một thư mục có tên các tập tin. Tôi phải đọc từng tệp .txt từ thư mục này:

abc123.txt
abc234.txt
abc345.txt
abc.txt
def123.txt
def234.txt
def345.txt

Ví dụ, khi tôi gõ ./filter.sh abc trong thiết bị đầu cuối, nó sẽ tìm kiếm .txt tập tin có tên chứa abc.

#!/bin/bash
 
đầu vào1=$1


tìm ./files -type f -name "*$input1*.txt" 

đầu ra của tôi trông như thế này

./files/abc345.txt
./files/abc234.txt
./files/abc123.txt
./files/abc.txt

tôi có đang làm đúng không? Và ngoài ra, có thể không hiển thị ./các tập tin/ ở đầu ra? Và tại sao đầu ra của tôi hiển thị abc345, abc234, abc123 thay vì abc123, abc234, abc345?

Điểm:9
lá cờ jp
  • Vâng, nó là tốt. Nhưng khi bạn quen thuộc hơn với tìm thấy, bạn sẽ thực hiện trực tiếp trên dòng lệnh (thay vì thông qua shellscript). Tôi sử dụng shellscript rất nhiều, nhưng chủ yếu cho các tác vụ lớn hơn (một số dòng lệnh).

  • Bạn có thể loại bỏ điểm bắt đầu mà nó được tìm thấy:

    tìm ./files -type f -name "*$input1*.txt" -printf "%P\n"
    
  • Cuối cùng, bạn có thể sắp xếp các tệp sau đó:

    tìm ./files -type f -name "*$input1*.txt" -printf "%P\n" | loại
    
  • Nếu một số lượng nhỏ hoặc các tệp nhỏ, bạn có thể ghi nội dung vào thiết bị đầu cuối với

    find ./files -type f -name "*$input1*.txt" -exec echo "--- {}:" \; -exec cat {} \;
    

    Đầu ra có thể được chuyển hướng đến một tập tin bằng cách > đầu ra.txt

    find ./files -type f -name "*$input1*.txt" -exec echo "--- {}:" \; -exec cat {} \; > đầu ra.txt
    

    Cuộn theo chiều ngang để xem phần cuối của dòng này.

  • nếu nhiều tệp hoặc một số tệp lớn, có thể tốt hơn nếu xem các tệp ở chế độ ít hơn hoặc có thể là trình soạn thảo văn bản yêu thích của bạn,

    find ./files -type f -name "*$input1*.txt" -exec less {} \;
    

    và thoát bằng 'q' từ less giữa mỗi tệp.

  • tìm thấy đấu với ls

    • tìm thấy là một công cụ nâng cao có thể tìm tệp [đệ quy] trong cây thư mục và nó có nhiều tùy chọn. Phải mất một thời gian dài để tìm hiểu những gì có thể được thực hiện với nó. Nhìn thấy người đàn ông tìm thấy hoặc có thể dễ dàng hơn, xem hướng dẫn qua internet.

    • ls là một công cụ đơn giản hơn, liệt kê các tệp ở một cấp độ thư mục, thường là cấp độ hiện tại. Nó cũng có nhiều lựa chọn, nhưng khá dễ sử dụng từ dòng lệnh. Xin lưu ý rằng ls có thể hoạt động một cách khó hiểu trong shellscripts, đặc biệt là khi kết hợp với các lệnh khác. Nhìn thấy người đàn ông ls.

user15907922 avatar
lá cờ us
Ahh, cảm ơn nó hoạt động! Tôi có thể biết cách đọc hoặc in nội dung từ tệp txt đó không? mình thử làm khoảng 1 ngày rồi vẫn không ra
vanadium avatar
lá cờ cn
Đối với điểm 1, nếu đó là một công việc định kỳ, thì việc tạo một tập lệnh trình bao rõ ràng là một cách thực hành tốt.
sudodus avatar
lá cờ jp
@ user15907922, đọc hoặc in nghĩa là gì? Bạn có muốn in mọi thứ vào thiết bị đầu cuối hoặc xem chúng trong một số công cụ hoặc in ra máy in giấy không?
user15907922 avatar
lá cờ us
in nội dung trong tệp văn bản ra thiết bị đầu cuối.
sudodus avatar
lá cờ jp
@ user15907922, tôi đề xuất một vài phương pháp để xem tệp. Một trong số họ sẽ làm việc?
user15907922 avatar
lá cờ us
@sudodus vâng, nó hoạt động. cảm ơn rất nhiều! Và tôi có thể biết cách sao chép những nội dung đó trong tệp .txt sang tệp .txt khác không? giả sử sao chép vào copy.txt
sudodus avatar
lá cờ jp
Bạn có thể **chuyển hướng** đầu ra tới thiết bị đầu cuối thành một tệp có `>`. Tôi sẽ chỉ ra điều đó bằng cách chỉnh sửa câu trả lời.
user15907922 avatar
lá cờ us
đó là công việc! cảm ơn vì đã giúp tôi!
Điểm:5
lá cờ in

Bạn có thể làm như vậy và làm theo lời khuyên của @sudodus để cải thiện đầu ra.

Tuy nhiên tìm thấy là một chút quá mức cần thiết cho trường hợp sử dụng của bạn, bạn chỉ cần sử dụng ls:

ls -1 tệp/abc*

Để lấy tên thư mục:

(tệp cd && ls -1 abc*)
user15907922 avatar
lá cờ us
nhưng làm cách nào để sao chép những nội dung đó trong tệp txt sang tệp .txt khác?
pLumo avatar
lá cờ in
ý bạn là gì? Tôi không thấy phần này trong câu hỏi của bạn. Bạn có muốn thực hiện `tệp mèo/abc*` hay `tệp ít hơn/abc*` không?
user15907922 avatar
lá cờ us
không sao, tôi đã giải quyết nó. cảm ơn vì đã giúp đỡ!

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