Điểm:0

Cách tạo cấu hình cho tập lệnh tìm và xóa của bạn

lá cờ cn

Tôi có một tập lệnh thực hiện tác vụ sau: Tìm kiếm tệp có tiêu chí đã xác định trong một thư mục.

tìm Tài liệu/Tệp/Tệp nhật ký/ -mtime +1d -type f '(' -name '*.log' -or -name '*[0-9].*' ')' -delete

bây giờ tôi muốn tạo một tệp cấu hình cho tập lệnh này, nơi bạn có thể tự hủy, phần mở rộng, thời gian sửa đổi hoặc tên tệp.

Tôi chưa bao giờ tạo tệp cấu hình trước đây và rất mới với zsh, vì vậy tôi không biết làm thế nào để làm điều đó. thách thức ở đây là chúng tôi phải làm việc vì tệp này dành cho khách hàng.

lá cờ hr
Bạn (hoặc khách hàng của bạn) có đang sử dụng `macosx` như ngụ ý trong thẻ của bạn không?
Mahmoud avatar
lá cờ cn
vâng, cả tôi và khách hàng đều đang sử dụng macosx
sudodus avatar
lá cờ jp
Bạn đang chạy phiên bản Ubuntu nào và phiên bản `find` nào?
Mahmoud avatar
lá cờ cn
Tôi hiện đang làm việc trên macos, sử dụng iterm2. đối với phiên bản find tôi không biết. mặc dù tôi biết tôi đang chạy zsh 5.8 nếu điều đó có ích.
sudodus avatar
lá cờ jp
Bạn sẽ có thể in phiên bản bằng `find -version`. Tôi hỏi vì cú pháp của bạn cho `mtime` không phù hợp với tôi.
Mahmoud avatar
lá cờ cn
gõ ```fins -version```kết quả cho tôi trong ```tìm: tùy chọn bất hợp pháp -- v cách sử dụng: tìm [-H | -L | -P] [-EXdsx] [-f path] đường dẫn ... [biểu thức] tìm [-H | -L | -P] [-EXdsx] -f đường dẫn [đường dẫn ...] [biểu thức]```
sudodus avatar
lá cờ jp
Tôi nghĩ bạn nên hỏi một số trang web về macos vì `find` hoạt động khác với ở đây tại Ubuntu.
terdon avatar
lá cờ cn
Bạn có thể hỏi trên [unix.se] hoặc [apple.se] nhưng nếu có, hãy làm rõ lý do bạn muốn có tệp cấu hình. Đó là một cách tiếp cận rất phức tạp và khó sử dụng.Tại sao không chỉ chuyển chuỗi tìm kiếm dưới dạng đối số hoặc tùy chọn khi tập lệnh được khởi chạy? Sử dụng tệp cấu hình chỉ khiến mọi người (của bạn và người dùng của bạn) sống khó khăn hơn mà không mang lại lợi ích gì.
Mahmoud avatar
lá cờ cn
Tôi chỉ hỏi về Hỏi khác nhau. lý do cho cấu hình của nó chỉ là nó là một nhiệm vụ. khi tạo tập lệnh, tôi đã đề cập rằng việc ăn trưa tập lệnh từ tệp cấu hình là tùy chọn. khi hỏi làm thế nào chúng tôi có thể làm điều đó, chúng tôi được giao nhiệm vụ tự mình tìm ra nó (như một thử thách) mặc dù chúng tôi không thể đưa ra kết quả nào có thể giúp chúng tôi hướng dẫn cách thực hiện. mặc dù tôi đánh giá cao thời gian và nỗ lực trong việc giúp đỡ chúng tôi!
Điểm:0
lá cờ bz

Để sử dụng tệp cấu hình cho tập lệnh này, điều đó có nghĩa là tập lệnh sẽ phải đọc một số tham số từ tệp cấu hình.

Tập tin cấu hình config.txt:

con đường =.
tiện ích mở rộng = sh
modtime=1
tên tệp = kiểm tra

Tập kịch bản:

#!/bin/bash

lines=$(<config.txt) #read config.txt

cho dòng trong $lines; làm # phân tích cú pháp từng dòng và trích xuất các khóa giá trị tham số
  nếu [[ $line = *"="* ]]; sau đó # nếu một từ chứa dấu "="...
     vars[${line%%=*}]=${line#*=} # sau đó đặt nó làm khóa mảng kết hợp
  fi
xong
find ${vars[path]} -mtime ${vars[modtime]} -type f "(" -name "*.${vars[extension]}" -or -name "${vars[filename]}.* " ")"

Giải pháp khác là sử dụng tập lệnh có đối số và chỉ định đường dẫn, phần mở rộng, thời gian sửa đổi hoặc tên tệp như sau:

#!/bin/bash

Cứu giúp()
{
   tiếng vang ""
   echo "Cách sử dụng: $0 -p Đường dẫn -e tệpPhần mở rộng -m sửa đổiThời gian -f tên tệp"
   echo -e "\t-path Đường dẫn tìm kiếm"
   echo -e "\t-ext phần mở rộng tên tập tin"
   echo -e "\t-modtime thời gian sửa đổi, ví dụ: +1d"
   echo -e "\t-filename tên tệp"
   thoát 1 # Thoát tập lệnh sau khi in trợ giúp
}

trong khi getopts "p:e:m:f:" opt
làm
   trường hợp "$opt" trong
      p ) pathFile="$OPTARG" ;;
      e) tiện ích mở rộng="$OPTARG" ;;
      m ) modTime="$OPTARG" ;;
      f ) fileName="$OPTARG" ;;
      ? ) Cứu giúp ;; # In trợ giúp trong trường hợp tham số không tồn tại
   thoát hiểm
xong

# In trợ giúp trong trường hợp tham số trống
nếu [ -z "$pathFile" ] || [ -z "$extension" ] || [ -z "$modifyTime" ] || [ -z "$fileName" ]
sau đó
   echo "(Các) tham số trống, vui lòng kiểm tra chúng...";
   Cứu giúp
fi

tìm $pathFile -mtime $modifyTime -type f "(" -name "*.$extension" -or -name "$fileName.*" ")"

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