パブリックファイルシステム内およびテーマディレクトリ内にある未使用のファイルをすべて一覧表示してそれらを一覧表示する方法はありますか、あるいはそれらを自動的に削除するオプションさえあるでしょうか?
現在、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
これは、関連付けられたノードがないすべてのファイルを返します。返された行とファイルを削除しても安全かどうかはわかりませんが、おそらくモジュールの設定によっても異なります。自己責任においてのみ使用してください!
3年後にこの投稿に来た人のために、これを行うために使用できる Fancy File Delete という小さなモジュールがあります。
この投稿の時点ではベータ版なので、自己責任で使用してください。いつものように、DBクエリを介して孤立したものをクリーンアップすることはおおざっぱであり、その成功は特定のモジュール設定に大きく依存します。
「ファイルがノードまたはファイルにもはやアタッチされていないファイルおよびファイル管理テーブルにないディレクトリを特定するのに役立つかもしれないもの」(「- 未使用のファイルを削除する方法は? ")、 ファイルチェッカー モジュールを使用することです。プロジェクトページからの詳細:
完璧なDrupalの世界では、サーバーファイルシステムとそれに対応するDrupalのファイルテーブルのエントリは100%同期されています。しかし、ディスク障害が原因でファイルシステムの一部が破損した場合はどうなりますか?モジュールがデータベースとファイルをめちゃくちゃにしたり、デプロイスクリプトが失敗したりしましたか?さて、このモジュールは、同期していないファイルを監視および検出するのに役立ちます。
すぐに使用できるファイルテーブルには、一時(0)と永続(1)の2種類のステータスがあります。ファイルチェッカーにより、追加のステータスが不足(2)になります。さまざまな方法でトリガーできる検証プロセスの範囲で、ファイルテーブルのステータス列が更新されます。
特徴
- 検証プロセスを実行する:オンデマンド、cron経由、drush経由(計画中)
- フィルター付きのファイルリスト概要ページ
- ビューの統合
- ファイルチェック用のDrushコマンド
ビューの結果をエクスポートする場合は、views_data_exportモジュールを使用することをお勧めします。
だからあなたができることはそうです:
注:この質問はD7に関するものですが、これはD8の(アルファ)バージョンでもあります。
不要なファイルを削除するモジュールが1つあります fancy file delete 。
VBOカスタムアクションを介してファイルを強制的に削除するオプションを持つすべての管理ファイルの表示ファイル管理テーブルにないデフォルトのファイルディレクトリから未使用のファイルを削除する。 AKA管理されていないファイルをすべて削除しています。ノードおよびファイル使用状況テーブルにアタッチされなくなった、インストール全体からの未使用ファイルの削除。 AKA孤立したファイルをすべて削除します。
未使用のファイルを削除することができます
file_managedテーブルから手動で削除します。
$this->database ->delete('file_managed') ->condition('fid', $fid, '=') ->execute();
ファイルのステータスの設定は、一時ファイルとしてマークされるため、cronは一定時間後にファイルを削除します。$file = File::load ($fid); $file->setTemporary();
fancy file deleteモジュールは私にとってはまったく機能しませんでした。これはより手動の代替策です。
管理ファイルテーブルにないファイルをフォルダーから削除するには、次の方法があります。
1)すべての管理対象ファイルのリストを作成します。
mysql whateverdb -e "select filename from file_managed" > ~/managed-files.txt
2)リストにないディレクトリからすべてのファイルを削除します。これを行うには、小さなbashスクリプトを使用しました。
#!/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
変数を、ファイルを削除するフォルダーのパスに変更(および除外ファイルへのパスを更新)