web-dev-qa-db-ja.com

CSSスタイルシートまたはノードからリンクされていない孤立したファイルと画像を見つける方法は?

パブリックファイルシステム内およびテーマディレクトリ内にある未使用のファイルをすべて一覧表示してそれらを一覧表示する方法はありますか、あるいはそれらを自動的に削除するオプションさえあるでしょうか?

現在、CSSスタイルシートまたはノードからリンクされていないファイルを意味します。

20
camcam

次の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

これは、関連付けられたノードがないすべてのファイルを返します。返された行とファイルを削除しても安全かどうかはわかりませんが、おそらくモジュールの設定によっても異なります。自己責任においてのみ使用してください!

ソース: http://drupal.org/node/733258#comment-5582764

14
David Carter

3年後にこの投稿に来た人のために、これを行うために使用できる Fancy File Delete という小さなモジュールがあります。

この投稿の時点ではベータ版なので、自己責任で使用してください。いつものように、DBクエリを介して孤立したものをクリーンアップすることはおおざっぱであり、その成功は特定のモジュール設定に大きく依存します。

5
joe_flash

ファイルがノードまたはファイルにもはやアタッチされていないファイルおよびファイル管理テーブルにないディレクトリを特定するのに役立つかもしれないもの」(「- 未使用のファイルを削除する方法は? ")、 ファイルチェッカー モジュールを使用することです。プロジェクトページからの詳細:

完璧なDrupalの世界では、サーバーファイルシステムとそれに対応するDrupalのファイルテーブルのエントリは100%同期されています。しかし、ディスク障害が原因でファイルシステムの一部が破損した場合はどうなりますか?モジュールがデータベースとファイルをめちゃくちゃにしたり、デプロイスクリプトが失敗したりしましたか?さて、このモジュールは、同期していないファイルを監視および検出するのに役立ちます。

すぐに使用できるファイルテーブルには、一時(0)と永続(1)の2種類のステータスがあります。ファイルチェッカーにより、追加のステータスが不足(2)になります。さまざまな方法でトリガーできる検証プロセスの範囲で、ファイルテーブルのステータス列が更新されます。

特徴

  • 検証プロセスを実行する:オンデマンド、cron経由、drush経由(計画中)
  • フィルター付きのファイルリスト概要ページ
  • ビューの統合
  • ファイルチェック用のDrushコマンド

ビューの結果をエクスポートする場合は、views_data_exportモジュールを使用することをお勧めします。

だからあなたができることはそうです:

  • サイトを開発環境に複製(コピー)しますが、確認するディレクトリ内のファイルはコピーしないでください。バリエーションとして(この質問が非運用ステータスサイトに関するものである場合)、一時的にすべてのファイルをそのディレクトリから移動します。
  • ファイルチェッカー モジュールを使用して、「欠落」しているファイルを見つけます。これらは、明らかに使用されていない未使用のファイルです。しかし、このモジュールが議論しないファイルは...未使用です!
  • 不足しているすべてのファイルを、確認するディレクトリの正しい場所にコピーすることにより、ディレクトリの完全なコンテンツを段階的に再作成します。

:この質問はD7に関するものですが、これはD8の(アルファ)バージョンでもあります。

3
Pierre.Vriens

不要なファイルを削除するモジュールが1つあります fancy file delete

VBOカスタムアクションを介してファイルを強制的に削除するオプションを持つすべての管理ファイルの表示ファイル管理テーブルにないデフォルトのファイルディレクトリから未使用のファイルを削除する。 AKA管理されていないファイルをすべて削除しています。ノードおよびファイル使用状況テーブルにアタッチされなくなった、インストール全体からの未使用ファイルの削除。 AKA孤立したファイルをすべて削除します。

2
vgoradiya

未使用のファイルを削除することができます

  1. file_managedテーブルから手動で削除します。

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

  2. ファイルのステータスの設定は、一時ファイルとしてマークされるため、cronは一定時間後にファイルを削除します。
    $file = File::load ($fid); $file->setTemporary();

0

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変数を、ファイルを削除するフォルダーのパスに変更(および除外ファイルへのパスを更新)

0
Felix Eve