bash tập tin xử lý tập tin với các nhân vật xấu


1

Tôi đã nhận được một tệp zip với cấu trúc thư mục bao gồm dấu ngoặc đơn. Tôi đã làm việc thông qua hai quy trình tại cli và bây giờ hợp nhất chúng thành một tập lệnh

Các tìm kiếm đầu tiên thông qua cấu trúc tệp cho các tệp cụ thể sửa lỗi dấu ngoặc sau đó chuyển sang tshark để xử lý. đầu ra của tôi bằng cách sử dụng sed hoạt động ổn định nhưng ống tshark không giống như con đường tôi đang ném.

find <path> -iname *.cap |sed 's/(/\\(/' |sed 's/)/\\)/'

mất thư mục / thư mục (mô tả) /file.cap kết quả trong thư mục / thư mục (mô tả) /file.cap mát mẻ!

khi tôi thêm phần này vào tập lệnh bash

#/BIN/BASH

capfiles=($(find <path> -iname *.cap | sed s/(/\\(/‘ |sed s/)/\\)/‘))

for i in ${capfiles[@]}”;do
     tshark -r $i -T fields -e dns.qry.name |sort u > $i.uniquefqdns2lookup.txt

done

tôi có

'tshark: The file "folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file folder/folder\(description\)/file.cap" doesn't exist. 

Tôi đã thử chơi với ./ trong bản vá là một nhân vật rõ ràng không có may mắn. đầu ra đó trông giống như:

'tshark: The file "./"folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file "./folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file "./folder/folder\(description\)/file.cap" doesn't exist. 

Tôi đang thiếu gì? Tôi hoàn toàn tắt với điều này?


thay đổi #/BIN/BASHđể #!/bin/bash.
αғsнιη

Câu trả lời:


0

Ngoài bình luận của KasiyA,

  • Hãy chắc chắn rằng trích dẫn của bạn là đúng cách. Trong câu hỏi của bạn, các sedmẫu được hiển thị kết thúc bằng backquote (`) thay vì trích dẫn chuyển tiếp ('). Tôi không biết nếu đó thực sự là trường hợp trong kịch bản của bạn.
  • Đặt $idấu ngoặc kép ( "$i") (xem câu trả lời này ).
  • Bạn có thể không thực sự cần dấu gạch chéo ngược, tùy thuộc vào cài đặt của tshark. Sử dụng "$i"sẽ giữ nguyên dấu ngoặc trong tên tệp của bạn. Tshark có lẽ đang tìm kiếm một tập tin với nghĩa đen \trong tên. Thử

    capfiles=($(find <path> -iname *.cap )

và xem những gì bạn nhận được.


Tôi đã phải thêm một dấu ngoặc khác ở cuối nhưng đây là đầu ra của tôi (không thay đổi), tcpdump / tcpdumpLog (một cái gì đó) /traffic.cap tcpdumps / tcpdumpLog (một cái gì đó) /traffic.cap tcpdumps / tcpdumpLog (một cái gì đó) /tcpdumpLog(s Something)/traffic.cap tcpdumps / tcpdumpLog (cái gì đó) /traffic.cap, nơi mà các dấu ngoặc kép hàng đầu và đuôi đến từ đâu?
carter

Hãy nghĩ rằng tôi đã trả lời câu hỏi của riêng mình
carter

Hãy nghĩ rằng tôi đã trả lời câu hỏi của riêng tôi về dấu ngoặc kép. Điều đó không có tác dụng đối với vấn đề ban đầu.
carter

@carter vậy vấn đề hóa ra là gì? Vui lòng gửi và chấp nhận câu trả lời của riêng bạn nếu cần thiết để câu hỏi sẽ không nằm trong danh sách "chưa được trả lời". Cảm ơn!
cxw
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.