Làm cách nào để tìm các tệp và hình ảnh mồ côi không được liên kết từ bất kỳ biểu định kiểu css hoặc từ bất kỳ nút nào?


21

Có cách nào để liệt kê tất cả các tệp không sử dụng nằm trong hệ thống tệp công khai và bên trong thư mục chủ đề và liệt kê chúng, hoặc thậm chí có thể có tùy chọn xóa chúng tự động không?

Ý tôi là các tệp hiện không được liên kết từ bất kỳ biểu định kiểu css hoặc từ bất kỳ nút nào.


Tôi cũng muốn biết câu trả lời cho điều đó, cảm ơn vì đã đăng câu hỏi!
NPC

Bạn đang đề cập đến các tệp được tải lên bằng Trường (như ImageField) hoặc các tệp nói chung (được tải lên qua IMCE)? Tôi không nghĩ rằng bạn có thể theo dõi tải lên IMCE mà không cần tìm kiếm từng thân nút để tham khảo.
Chaulky

Có, tôi đang tải lên qua IMCE. Tôi đã hy vọng có một mô-đun thực hiện những gì bạn đã nói: quét các nút để tìm các tham chiếu hình ảnh, sau đó cho các tham chiếu drupal nội bộ (không có tên miền) quét các thư mục có liên quan và so sánh cả hai để tìm các tệp không sử dụng. Có lẽ một cái gì đó tương tự được thực hiện với các liên kết trong một mô-đun hiện có để tìm các liên kết bị hỏng. Vì vậy, tôi nghĩ có thể mô-đun tương tự tồn tại cho hình ảnh nhưng có thể không ..
camcam

Câu trả lời:


14

Bạn có thể tìm thấy các tệp mồ côi bằng cách chạy truy vấn MySQL sau:

SELECT fm.*
FROM file_managed AS fm
LEFT OUTER JOIN file_usage AS fu ON (fm.fid = fu.fid)
LEFT OUTER JOIN node AS n ON (fu.id = n.nid)
WHERE fu.type = 'node' AND n.nid IS NULL

Điều này trả về tất cả các tệp không có nút liên quan. Tôi không chắc chắn liệu có an toàn để xóa các hàng và tệp được trả lại hay không, có lẽ cũng phụ thuộc vào thiết lập mô-đun của bạn. Chỉ sử dụng có nguy cơ của riêng bạn!

Nguồn: http://drupal.org/node/733258#comment-5582764


5
Bạn có thể đã chia sẻ liên kết đến bài viết GỐC mà bạn đã sao chép bài đăng của mình từ ....... drupal.org/node/733258#comment-5582764 Tôi nghĩ rằng việc hiển thị nguồn này là không hợp lý.
Sk8erPeter

Theo liên kết bạn đã đăng ở trên, tôi cũng nghĩ rằng mã trong drupal.org/node/733258#comment-7427898 là hữu ích vì nó sẽ xóa cả các tệp mồ côi và các mục tương ứng của chúng trong cơ sở dữ liệu.
Marcos Buarque

Trên thực tế, @ Sk8erPeter, thật hợp lý khi tổng hợp thông tin trong các câu trả lời và sau đó liên kết với nó. Đặc biệt nếu chúng đến từ một nguồn bên ngoài Stack Exchange.
Christia

1
@Christia, nếu bạn đọc bài viết gốc trước khi tôi chỉnh sửa nó (tôi đặt liên kết vào câu trả lời), bạn có thể thấy David đã sao chép từ bình luận của người khác bằng từ mà không đề cập đến nguồn của nó và đặt dấu ngoặc kép quanh bài đăng. Đây có thể được coi là đạo văn, đây là những gì nhận xét của tôi về. :)
Sk8erPeter

Bạn sẽ thấy điều này tạo ra một số id tệp trùng lặp, để tránh điều đó và thêm một số lượng trùng lặp mà tôi đã thêm một nhóm theo. CHỌN fm. *, COUNT (*) TỪ file_managed AS fm LEFT OUTER THAM GIA file_usage NHƯ fu ON 'nút' VÀ n.nid LÀ NHÓM NULL B fmNG fm.fid;
Cameron

5

Đối với những người đến với bài đăng này ba năm sau, có một mô-đun nhỏ bạn có thể sử dụng để thực hiện điều này được gọi là Xóa tệp Fancy .

Tại thời điểm của bài đăng này, nó đang ở giai đoạn thử nghiệm, vì vậy hãy tự chịu rủi ro khi sử dụng nó. Như mọi khi, việc dọn dẹp mồ côi bất cứ thứ gì thông qua các truy vấn DB có thể sơ sài và thành công của nó phụ thuộc rất nhiều vào thiết lập mô-đun cụ thể của bạn.


Tôi thấy mô-đun này rất có lỗi - đến mức nó vô dụng. ymmv.
Đêm giao thừa

3

Một cái gì đó có thể giúp xác định " các tệp không còn được gắn vào các nút hoặc tệp và thư mục không có trong bảng được quản lý tệp " (như trong câu hỏi trùng lặp về " Cách xóa các tệp không sử dụng? "), Là sử dụng Mô-đun kiểm tra tệp . Một số chi tiết về nó, từ trang dự án của nó:

Trong một thế giới Drupal hoàn hảo, hệ thống tệp máy chủ của bạn và các mục nhập mã hóa của nó trong bảng tệp của Drupal được đồng bộ hóa 100%. Nhưng nếu các phần của hệ thống tệp của bạn bị hỏng do một số lỗi đĩa thì sao? Hoặc một trong các mô-đun của bạn làm rối cơ sở dữ liệu và tập tin của bạn? Hoặc kịch bản triển khai của bạn đã trở nên bí mật? Chà, mô-đun này sẽ giúp bạn theo dõi và tìm ra tập tin nào không đồng bộ.

Trong hộp, bảng tệp có hai loại trạng thái: Tạm thời (0) và Vĩnh viễn (1). Trình kiểm tra tệp giới thiệu một trạng thái bổ sung Thiếu (2). Trong phạm vi của quy trình xác minh có thể được kích hoạt theo nhiều cách khác nhau, cột trạng thái của bảng tệp được cập nhật.

Tính năng, đặc điểm

  • Chạy quy trình xác minh: theo yêu cầu, qua cron, qua drush (trong kế hoạch)
  • Trang tổng quan danh sách tập tin với các bộ lọc
  • Tích hợp lượt xem
  • Lệnh Drush để kiểm tra tập tin

Nếu bạn muốn xuất kết quả của chế độ xem, bạn nên sử dụng mô-đun view_data_export.

Vì vậy, những gì bạn có thể làm là như vậy:

  • Sao chép (sao chép) trang web của bạn vào một số môi trường dev, nhưng không sao chép bất kỳ tệp nào trong thư mục bạn muốn kiểm tra. Là một biến thể (nếu câu hỏi này là về một trang web trạng thái không sản xuất), chỉ cần tạm thời di chuyển tất cả các tệp ra khỏi thư mục đó.
  • Sử dụng mô-đun Trình kiểm tra tệp để tìm hiểu những tệp nào bị "thiếu": đây là những tệp rõ ràng không được sử dụng. Nhưng bất kỳ tập tin nào mà mô-đun này không tranh luận là ... không được sử dụng!
  • Bằng cách sao chép tất cả các tệp bị thiếu vào vị trí chính xác của thư mục bạn muốn kiểm tra, sau đó bạn từng bước tạo lại một nội dung hoàn hảo của thư mục của bạn.

Lưu ý : mặc dù câu hỏi này là về D7, nhưng phiên bản (alfa) của nó cũng dành cho D8.


Cách tiếp cận rất hữu ích để giải quyết vấn đề của tôi
kb8

2

có một mô-đun loại bỏ các tập tin không mong muốn xóa tập tin ưa thích .

Xem tất cả các tệp được quản lý với tùy chọn buộc xóa chúng thông qua các hành động tùy chỉnh VBO Xóa thủ công các tệp được quản lý bằng FID (và một tùy chọn để buộc xóa nếu bạn thực sự muốn). Xóa các tệp không sử dụng khỏi thư mục tệp mặc định không có trong bảng được quản lý tệp. AKA xóa tất cả các tập tin không được quản lý. Xóa các tệp không sử dụng khỏi toàn bộ cài đặt không còn được gắn vào các nút & bảng sử dụng tệp. AKA xóa tất cả các tập tin mồ côi.


1
Tôi có một trải nghiệm tồi tệ với các hoạt động lớn và mô-đun vbo. Ban đầu tôi sẽ sử dụng một cách tiếp cận như được đề xuất bởi Pierre.Vriens, sau đó tôi sẽ sử dụng mô-đun đề xuất của bạn để duy trì làm sạch thư mục tệp.
kb8

0

Bạn có thể xóa tập tin không sử dụng bằng cách

  1. Xóa thủ công khỏi bảng file_managed , bằng một số truy vấn như

    $this->database ->delete('file_managed') ->condition('fid', $fid, '=') ->execute();

  2. Đặt trạng thái của tệp 0 , để đánh dấu là tệp tạm thời, do đó, cron sẽ xóa nó sau một thời gian nhất định.
    $file = File::load ($fid); $file->setTemporary();


0

Các mô-đun xóa tập tin ưa thích hoàn toàn không hoạt động đối với tôi. Đây là một thay thế thủ công hơn.

Để xóa các tệp khỏi thư mục không có trong bảng tệp được quản lý, bạn có thể:

1) Tạo danh sách tất cả các tệp được quản lý:

mysql whateverdb -e "select filename from file_managed" > ~/managed-files.txt

2) Xóa tất cả các tệp khỏi một thư mục không có trong danh sách đó. Để làm điều này, tôi đã sử dụng một tập lệnh bash nhỏ:

#!/bin/bash

IMG_FOLDER='/var/www/html/yoursite/docroot/sites/default/files/certain-images'
EXCLUDES='/home/yourhomeuser/managed-files.txt'

for FILE in $IMG_FOLDER/*; do
  if ! grep "$FILE" "$EXCLUDES"; then
        echo "Deleting $FILE"
        rm -f "$FILE"
  fi
done

Chỉ cần thay đổi IMG_FOLDERbiến thành đường dẫn của bất kỳ thư mục nào bạn muốn xóa tệp khỏi (và cập nhật đường dẫn đến tệp loại trừ của bạn)

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.