Điểm:0

Làm cách nào để tìm các thư mục không có tên nhất định?

lá cờ bf

Tôi đang cố gắng tìm nhiều thư mục, tất cả đều không có dấu ngoặc nhất định. Chúng là các thư mục phim, như vậy:

Zombie Flesh Eaters (1979) [tmdb-7219]
Vùng Đất Thây Ma (2009) [tmdb-19908]
Zombieland Double Tap (2019) [tmdb-338967]

Nhưng tôi cần tìm những cái KHÔNG có dấu ngoặc [tmdb].

Tôi không chắc chắn làm thế nào để làm điều này?

Chỉnh sửa nhanh: Đã thử sử dụng reg-ex \[.*?\] để tìm mọi thứ có dấu ngoặc trong đó, nhưng tôi không chắc nó có hoạt động chính xác hay không (tôi không giỏi về biểu thức chính quy, nhưng sử dụng trình kiểm tra biểu thức chính quy xác nhận rằng nó sẽ tìm mọi thứ bên trong dấu ngoặc).

Nhưng tôi cần tìm các thư mục KHÔNG CÓ dấu ngoặc.. Và tôi không biết làm thế nào để làm điều này

vanadium avatar
lá cờ cn
Làm thế nào bạn tìm thấy ở nơi đầu tiên? Trong một số trường hợp, `grep -v` có thể giúp ích cho bạn.
SDXCPTDR avatar
lá cờ bf
Sử dụng chuỗi này `'\[.*?\]'` khi sử dụng `find`.. Thậm chí không chắc nó hoạt động bình thường. Nhưng tôi cần tìm các thư mục không có dấu ngoặc :)
vanadium avatar
lá cờ cn
Chúng tôi cần thông tin này để được trong câu hỏi. Sử dụng "chỉnh sửa" để làm rõ câu hỏi của bạn. Nhận xét có thể không được đọc hoặc có thể biến mất bất cứ lúc nào.
muru avatar
lá cờ us
"Trình kiểm tra reg-ex" của bạn có sử dụng hương vị regex giống như `find` không? `.*?` trông giống như Perl, không hợp lý khi có `?` sau `*` trong BRE hoặc ERE.
SDXCPTDR avatar
lá cờ bf
Chỉ cần thử cái này: https://www.regextester.com/ Với kết quả: https://i.imgur.com/mKIBLJC.png -- một lần nữa xin lỗi; Tôi không biết nhiều về regex :/
Điểm:2
lá cờ cn

tìm thấy tính năng -không phải nhà điều hành. Cho nó biết nơi cần tìm, loại mặt hàng cần tìm (ví dụ: -loại d để chỉ tìm các thư mục) và những gì không nên có trong tên, tức là -không tên '*\[*\]'. Như vậy

tìm/ở đâu đó -type d -not -name '*\[*\]'
SDXCPTDR avatar
lá cờ bf
Cảm ơn! Điều này làm việc rất tốt cho tôi. Chỉ cần thêm `-maxdepth 1` trong trường hợp của tôi :)
Điểm:1
lá cờ in
Cas

Điều này có thể được thực hiện dễ dàng.

ls -Aq1 | grep -Pv '.*\[tmdb-\d+\].*'

đường ống sau ls được coi là một điều xấu nói chung, tuy nhiên, tôi cho rằng tất cả các thư mục không được đặt tên kỳ lạ bởi vì chúng chỉ là các thư mục phim, vì vậy tôi nghĩ rằng sau ls là tốt ở đây.

Tôi đã không kiểm tra nó nhưng tôi khá tự tin rằng nó sẽ hoạt động.

Ngoài ra, tôi đoán rằng bạn sẽ đặt các thư mục đó vào một vòng lặp để thêm id vào tên. Đoán tinh khiết nhưng tôi giả sử. Sau đó, điều này rất hữu ích vì đầu ra ls (vì -..1) sẽ nằm trong danh sách. Vì vậy, bạn có thể dễ dàng thực hiện việc này để xử lý từng thư mục một:

ls -Aq1 | grep -Pv '.*\[tmdb-\d+\].*' | \
trong khi mức đọc -r
làm
   ...
xong

hoặc

ls -Aq1 | \
trong khi mức đọc -r
làm
   nếu ! tiếng vang "mức $" | grep -Pq '.*\[tmdb-\d+\].*'
   sau đó
      ...
   fi
xong
SDXCPTDR avatar
lá cờ bf
Điều này cũng làm việc rất tốt. Cảm ơn bạn.
Điểm:0
lá cờ hr

Nếu bạn không cần tìm kiếm đệ quy, thì bash shell's extglob có thể làm phủ định bằng cách sử dụng !(mẫu) Ví dụ.

shopt -s extglob

printf '%s\n' !(*\[tmdb-*\]*)/

Các extglob tùy chọn có thể được bật theo mặc định trong vỏ bash tương tác của bạn. dấu vết / chỉ cần thiết nếu bạn cần loại trừ các tệp đơn giản khỏi đối sánh - tương đương với tìm thấy lệnh của gõ -d.

Bán tại. đưa ra một thư mục có nội dung

$ ls
'Zombie Flesh Eaters (1979) [cái gì khác ở đây]' 'Zombieland (2009) [tmdb-19908]'
'Zombie Flesh Eaters (1979) [tmdb-7219]' 'Zombieland Double Tap (2019) [tmdb-338967]'
'Xứ sở xác sống (2009)'

sau đó

$ printf '%s\n' !(*\[tmdb-*\]*)/
Zombie Flesh Eaters (1979) [cái gì khác ở đây]/
Vùng Đất Thây Ma (2009)/

hoặc

$ ls -d !(*\[tmdb-*\]*)/
'Zombie Flesh Eaters (1979) [cái gì khác ở đây]/' 'Zombieland (2009)/'

không giống tìm thấy, điều này sẽ không khớp với các thư mục ẩn theo mặc định (mặc dù bạn có thể đưa chúng vào bằng cách đặt shopt -s dotglob).

nếu bạn làm cần tìm kiếm đệ quy, bạn có thể thêm shopt -s sao cầu Và sử dụng **/!(*\[tmdb-*\]*)/ mặc dù tôi có thể chọn tìm thấy trong trường hợp nà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.