パブリックファイルシステム内およびテーマディレクトリ内にあるすべての未使用ファイルを一覧表示してそれらを一覧表示する方法はありますか、あるいはそれらを自動的に削除するオプションがありますか?
現在、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
これにより、関連付けられたノードがないすべてのファイルが返されます。返された行とファイルを削除しても安全かどうかはわかりませんが、おそらくモジュールのセットアップにも依存します。ご自身の責任でのみ使用してください!
3年後にこの投稿にアクセスする人のために、これを行うために使用できるFancy File Deleteという小さなモジュールがあります。
この投稿の時点では、ベータ版であるため、自己責任で使用してください。いつものように、DBクエリを使用して孤立したものをクリーンアップすることは大雑把であり、その成功は特定のモジュール設定に大きく依存します。
「ノードに接続されていないファイルや、ファイル管理テーブルにないファイルやディレクトリ」を特定するのに役立つ可能性のあるもの(「未使用ファイルを削除する方法」に関する重複した質問のように)は、ファイルチェッカーモジュール。プロジェクトページからの詳細:
完璧なDrupalの世界では、サーバーファイルシステムとDrupalのファイルテーブル内の対応するエントリは100%同期されています。しかし、ディスク障害が原因でファイルシステムの一部が破損した場合はどうでしょうか?または、モジュールの1つがデータベースとファイルを台無しにしましたか?または、展開スクリプトが激しくなりましたか?さて、このモジュールは、どのファイルが同期していないかを監視して見つけるのに役立ちます。
すぐに使用できるファイルテーブルには、一時(0)と永続(1)の2種類のステータスがあります。ファイルチェッカーは、追加のステータスMissing(2)を導入します。さまざまな方法でトリガーできる検証プロセスの範囲で、ファイルテーブルのステータス列が更新されます。
特徴
- 検証プロセスの実行:オンデマンド、cron経由、drush経由(計画中)
- フィルター付きのファイルリストの概要ページ
- ビューの統合
- ファイルチェック用のDrushコマンド
ビューの結果をエクスポートする場合は、views_data_exportモジュールを使用することをお勧めします。
だからあなたができることは次のようなものです:
注:この質問はD7についてですが、これはD8でも(アルファ版)です。
不要なファイルを削除するモジュールが1つあります。
VBOカスタムアクションを介して強制的に削除するオプションを備えたすべての管理対象ファイルの表示FIDによって管理対象ファイルを手動で削除する(および必要に応じて強制的に削除するオプション)ファイル管理テーブルにない未使用のファイルをデフォルトのファイルディレクトリから削除します。別名ですべてのアンマネージドファイルを削除します。ノードとファイル使用量テーブルに添付されなくなった未使用ファイルをインストール全体から削除します。別名ですべての孤立ファイルを削除します。
使用していないファイルを削除するには
次のようなクエリにより、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)そのリストにないディレクトリからすべてのファイルを削除します。これを行うには、小さな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
ファイルを削除するフォルダーのパスに変数を変更するだけです(そして、除外ファイルへのパスを更新します)。