มีวิธีในการแสดงรายการไฟล์ที่ไม่ได้ใช้ทั้งหมดซึ่งอยู่ในระบบไฟล์สาธารณะและในไดเรกทอรีธีมและรายการไฟล์เหล่านั้นหรืออาจมีตัวเลือกในการลบโดยอัตโนมัติ
ฉันหมายถึงไฟล์ที่ไม่ได้เชื่อมโยงจากสไตล์ชีท css ใด ๆ หรือจากโหนดใด ๆ
มีวิธีในการแสดงรายการไฟล์ที่ไม่ได้ใช้ทั้งหมดซึ่งอยู่ในระบบไฟล์สาธารณะและในไดเรกทอรีธีมและรายการไฟล์เหล่านั้นหรืออาจมีตัวเลือกในการลบโดยอัตโนมัติ
ฉันหมายถึงไฟล์ที่ไม่ได้เชื่อมโยงจากสไตล์ชีท css ใด ๆ หรือจากโหนดใด ๆ
คำตอบ:
คุณสามารถค้นหาไฟล์ที่ถูกโยงถึงโดยรันเคียวรี MySQL ต่อไปนี้:
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
ส่งคืนไฟล์ทั้งหมดที่ไม่มีโหนดที่เชื่อมโยง ฉันไม่แน่ใจว่าปลอดภัยหรือไม่ที่จะลบแถวและไฟล์ที่ส่งคืนอาจจะขึ้นอยู่กับการตั้งค่าโมดูลของคุณด้วย ใช้ความเสี่ยงของคุณเองเท่านั้น!
สำหรับผู้ที่มาโพสต์นี้สามปีต่อมามีโมดูลเล็ก ๆ น้อย ๆ ที่คุณสามารถใช้ในการทำเช่นนี้เรียกว่าแฟนซีไฟล์ลบ
ในขณะที่โพสต์นี้เป็นรุ่นเบต้าดังนั้นคุณต้องยอมรับความเสี่ยงเอง และเช่นเคยการล้างสิ่งที่ไม่ได้ใช้งานผ่านการสืบค้นฐานข้อมูลนั้นสามารถทำให้เข้าใจได้และความสำเร็จนั้นขึ้นอยู่กับการตั้งค่าโมดูลของคุณ
สิ่งที่อาจช่วยระบุ " ไฟล์ที่ไม่ได้เชื่อมต่อกับโหนดหรือไฟล์และไดเรกทอรีที่ไม่ได้อยู่ในตารางจัดการไฟล์ " อีกต่อไป (เช่นเดียวกับคำถามที่ซ้ำกันเกี่ยวกับ " วิธีการลบไฟล์ที่ไม่ได้ใช้ ") คือการใช้โมดูลตัวตรวจสอบไฟล์ รายละเอียดบางอย่างเกี่ยวกับเรื่องนี้จากหน้าโครงการ:
ในโลกแห่ง Drupal ที่สมบูรณ์แบบระบบไฟล์เซิร์ฟเวอร์ของคุณและรายการที่เกี่ยวข้องในตารางไฟล์ของ Drupal ได้รับการซิงโครไนซ์ 100% แต่ถ้าส่วนใดส่วนหนึ่งของระบบไฟล์ของคุณเกิดความเสียหายเนื่องจากความล้มเหลวของดิสก์ หรือหนึ่งในโมดูลของคุณทำให้ฐานข้อมูลและไฟล์ของคุณยุ่งเหยิง? หรือสคริปต์การปรับใช้ของคุณไปห้อมล้อม? ถ้าอย่างนั้นโมดูลนี้จะช่วยให้คุณตรวจสอบและค้นหาไฟล์ที่ไม่ซิงค์กัน
ออกจากกล่องตารางไฟล์มีสถานะสองประเภท: ชั่วคราว (0) และถาวร (1) ตัวตรวจสอบไฟล์แนะนำสถานะเพิ่มเติมที่ขาดหายไป (2) ในขอบเขตของกระบวนการตรวจสอบซึ่งสามารถทริกเกอร์ได้หลายวิธีคอลัมน์สถานะของตารางไฟล์จะถูกอัพเดท
คุณสมบัติ
- เรียกใช้กระบวนการตรวจสอบ: ตามต้องการผ่าน cron ผ่าน drush (กำลังวางแผน)
- หน้าภาพรวมรายการไฟล์พร้อมตัวกรอง
- การรวมเข้าชม
- คำสั่ง Drush สำหรับการตรวจสอบไฟล์
หากคุณต้องการส่งออกผลลัพธ์ของมุมมองแนะนำให้ใช้โมดูล views_data_export
ดังนั้นสิ่งที่คุณสามารถทำได้คือ:
หมายเหตุ : แม้ว่าคำถามนี้จะเกี่ยวกับ D7 แต่เป็นรุ่น (อัลฟ่า) ของมันสำหรับ D8 ด้วย
มีหนึ่งโมดูลที่ลบไฟล์ที่ไม่พึงประสงค์ไฟล์แฟนซีเป็น
ดูไฟล์ที่มีการจัดการทั้งหมดพร้อมตัวเลือกเพื่อบังคับให้ลบไฟล์ผ่านการกระทำที่กำหนดเองของ VBO การลบไฟล์ที่มีการจัดการด้วยตนเองโดย FID (และตัวเลือกในการบังคับให้ลบหากคุณต้องการ) การลบไฟล์ที่ไม่ได้ใช้จากไดเรกทอรีไฟล์เริ่มต้นที่ไม่ได้อยู่ในตารางการจัดการไฟล์ AKA ลบไฟล์ที่ไม่มีการจัดการทั้งหมด การลบไฟล์ที่ไม่ได้ใช้จากการติดตั้งทั้งหมดที่ไม่ได้เชื่อมต่อกับโหนดและตารางการใช้ไฟล์ AKA ลบไฟล์ที่ถูกโยงถึงทั้งหมด
คุณสามารถลบไฟล์ที่ไม่ได้ใช้โดย
ลบออกจากตารางfile_managedด้วยตนเองโดยใช้แบบสอบถามบางอย่างเช่น
$this->database
->delete('file_managed')
->condition('fid', $fid, '=')
->execute();
การตั้งค่าสถานะของไฟล์0เพื่อทำเครื่องหมายว่าเป็นไฟล์ชั่วคราวดังนั้น cron จะลบออกหลังจากระยะเวลาหนึ่ง
$file = File::load ($fid);
$file->setTemporary();
ลบไฟล์แฟนซีโมดูลไม่ได้ทำงานเลยสำหรับผม นี่คือทางเลือกเพิ่มเติมด้วยตนเอง
ในการลบไฟล์ออกจากโฟลเดอร์ที่ไม่ได้อยู่ในตารางไฟล์ที่มีการจัดการคุณสามารถ:
1) สร้างรายการของไฟล์ที่ถูกจัดการทั้งหมด:
mysql whateverdb -e "select filename from file_managed" > ~/managed-files.txt
2) ลบไฟล์ทั้งหมดจากไดเรกทอรีที่ไม่ได้อยู่ในรายการนั้น เมื่อต้องการทำสิ่งนี้ฉันใช้สคริปต์ทุบตีขนาดเล็ก:
#!/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
เพียงเปลี่ยนIMG_FOLDER
ตัวแปรเป็นพา ธ ของโฟลเดอร์ใดก็ตามที่คุณต้องการลบไฟล์ (และอัปเดตพา ธ เป็นไฟล์แยกของคุณ)