Điểm:0

Làm cách nào để xóa danh sách tên tệp không có đường dẫn được khớp trong nhiều thư mục con?

lá cờ uz

Làm cách nào để xóa danh sách tên tệp không có đường dẫn được khớp trong nhiều thư mục con?

Delete_list.txt có thể chứa (mỗi tên tệp trên một dòng):

a.jpg
b.jpg
c.jpg

Các tệp này có thể tồn tại trong nhiều thư mục con. Tôi muốn xóa tất cả chúng. Tôi đã thử nhưng không thành công:

cho f trong $(delete_list.txt); tìm . -tên "$f" -loại f -xóa ; xong 

thử lần 2

  f trong $(delete_list.txt); tìm . -name "$f" -type f -exec rm -f {} \;

lần thử thứ 3

trong khi IFS= đọc -r tập tin; làm rm -r -- "$file" ; xong < delete_list.txt

thử lần thứ 4

cho f trong $(delete_list.txt); làm nếu [ -f $f ]; sau đó rm $f; có; xong
lá cờ ar
Bạn có thể vui lòng viết lại tập lệnh để mỗi lệnh nằm trong các dòng riêng biệt và được thụt vào khi thích hợp không? Điều này rất khó đọc. Có vẻ như bạn có 3 lần thử tập lệnh khác nhau, tất cả đều lộn xộn với nhau.
bac0n avatar
lá cờ cn
Lưu ý: ngay cả khi nó không được khuyến nghị và tôi thực sự khuyên bạn không nên sử dụng nó, thì cú pháp vẫn là `$(
Điểm:3
lá cờ hr

Trong một shell chẳng hạn như bash hỗ trợ các mảng, bạn có thể tập hợp tất cả các tên thành một tìm thấy Thuộc tính

#!/bin/bash

khai báo -a namep=()

trong khi IFS= đọc tên -r; làm 
  namep+=( -name "$name" -o )
xong < delete_list.txt

bỏ đặt tênp[-1] # xóa dấu thừa -o

tìm thấy . -type f \( "${namep[@]}" \) -print

Biến đổi -in đến -xóa bỏ (hoặc -in -xóa) chỉ khi bạn chắc chắn rằng nó đang tìm đúng tệp.

Elias Estatistics avatar
lá cờ uz
Nhanh quá! Trong vài phút, xóa hàng nghìn tệp trong hàng nghìn thư mục con!!! Bạn có thể giải thích thêm "mảng" trong bash là gì và cách sử dụng/sử dụng nó trong hệ thống không? Và tại sao nó nhanh hơn nhiều so với lựa chọn của tôi?
Elias Estatistics avatar
lá cờ uz
"lãnh đạo ngoại lai" nghĩa là gì?
lá cờ hr
@EliasEstatistics chúng tôi muốn chuỗi bắt đầu bằng `-name` chứ không phải `-o`, vì vậy chúng tôi xóa phần tử mảng thứ 0
lá cờ hr
... Tôi chỉ sửa đổi trình tự một chút - có lẽ nó rõ ràng hơn theo cách này?
Elias Estatistics avatar
lá cờ uz
Tôi phải đọc về các mảng trong linux và "dẫn đầu không liên quan". Dẫu sao cũng xin cảm ơn.
Điểm:0
lá cờ uz

Điều này đã lừa tôi. Nó đang xóa tất cả các tên tệp phù hợp trong các tệp đã cho trong tất cả các thư mục con.

Tuy nhiên, nó cực kỳ chậm. delete_list.txt chứa khoảng 100 tên tệp được tìm thấy trong hơn 250 nghìn thư mục con.

 trong khi đọc -r TẬP TIN; làm echo "$(find . -name "$FILE" -type f -delete): $FILE"; xong < delete_list.txt

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