CSS 스타일 시트 또는 노드에서 연결되지 않은 고아 파일 및 이미지를 찾는 방법은 무엇입니까?


21

공용 파일 시스템과 테마 디렉토리 내에있는 사용하지 않는 모든 파일을 나열하고 나열하거나 자동으로 삭제하는 옵션이있는 방법이 있습니까?

나는 현재 CSS 스타일 시트 또는 노드에서 링크되지 않은 파일을 의미합니다.


질문에 대한 답변을 보내 주셔서 감사합니다.
NPC

Field로 업로드 한 파일 (예 : ImageField) 또는 일반 파일 (IMCE를 통해 업로드)을 참조하고 있습니까? 각 노드 본문을 참조하지 않고 IMCE 업로드를 추적 할 수 있다고 생각하지 않습니다.
Chaulky

예, IMCE를 통해 업로드하고 있습니다. 이미지 참조를 찾기 위해 노드를 스캔 한 다음 도메인이없는 내부 drupal 참조가 관련 디렉토리를 스캔하고 사용하지 않는 파일을 찾기 위해 둘을 비교하는 모듈이 있기를 바랐습니다. 기존 모듈의 링크에서 끊어진 링크를 찾기 위해 비슷한 작업을 수행했을 수 있습니다. 이미지에 비슷한 모듈이 존재하지만 어쩌면 그렇지 않다고 생각했습니다.
camcam

답변:


14

다음 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


5
귀하는 귀하의 게시물을 복사 한 원본 게시물에 대한 링크를 공유 할 수 있습니다 ....... drupal.org/node/733258#comment-5582764 소스를 표시하지 않는 것이 매우 비 윤리적이라고 생각합니다.
Sk8erPeter

위의 링크를 따라 가면 고아 파일과 데이터베이스의 해당 항목을 모두 제거하기 때문에 drupal.org/node/733258#comment-7427898 의 코드 가 유용 하다고 생각 합니다.
Marcos Buarque

실제로 @ Sk8erPeter는 답변에 정보를 요약 한 다음 연결하는 것이 좋습니다. 특히 Stack Exchange 외부의 소스에서 온 경우.
Christia

1
@Christia, 당신이 그것을 편집하기 전에 원래 게시물을 읽으면 (링크를 답에 넣습니다) David는 소스를 언급하지 않고 게시물 주위에 인용 부호를 넣지 않고 다른 사람의 주석 단어를 단어별로 복사 한 것을 볼 수 있습니다. 이것은 표절로 간주 될 수 있습니다. 이것이 제 의견입니다. :)
Sk8erPeter

이것을 피하고 그룹을 추가 한 중복 수를 추가하기 위해 중복 파일 ID가 생성됩니다. file_managed AS에서 fm. *, COUNT (*)를 선택하십시오. fm LEFT OUTER JOIN file_usage AS fu ON (fm.fid = fu.fid) 'node'AND n.nid는 NULL 그룹으로 fm.fid입니다.
Cameron

5

3 년 후이 포스트에 오는 사람들을 위해,이 작업을 수행하는 데 사용할 수있는 작은 모듈 인 Fancy File Delete가 있습니다.

이 게시물을 작성할 당시 베타 버전이므로 자신의 책임하에 사용하십시오. 항상 그렇듯이 DB 쿼리를 통해 고립 된 항목을 정리하는 것은 스케치가 될 수 있으며 성공 여부는 특정 모듈 설정에 따라 크게 다릅니다.


나는이 모듈이 매우 버그가 있음을 알았습니다-쓸모가 없었습니다. ymmv.
Felix Eve

3

" 더 이상 사용되지 않는 파일을 삭제하는 방법 "에 대한 중복 질문에서와 같이 " 파일 관리 테이블에없는 노드 또는 파일 및 디렉토리에 더 이상 첨부되지 않은 파일 "을 식별하는 데 도움이 될 수 있는 것은 파일 검사기 모듈. 프로젝트 페이지에서 이에 대한 일부 세부 정보 :

완벽한 Drupal 환경에서 서버 파일 시스템과 Drupal의 파일 표에있는 해당 항목은 100 % 동기화됩니다. 그러나 일부 디스크 오류로 인해 파일 시스템의 일부가 손상된 경우 어떻게해야합니까? 아니면 모듈 중 하나가 데이터베이스와 파일을 엉망으로 만들었습니까? 아니면 배포 스크립트가 혼란 스러웠습니까? 그러면이 모듈을 사용하여 동기화되지 않은 파일을 모니터링하고 찾을 수 있습니다.

기본적으로 파일 테이블에는 임시 (0) 및 영구 (1)의 두 가지 상태가 있습니다. 파일 검사기는 추가 상태 누락 (2)을 도입합니다. 다양한 방법으로 트리거 할 수있는 검증 프로세스의 범위에서 파일 테이블의 상태 열이 업데이트됩니다.

풍모

  • 검증 프로세스 실행 : 요청시, cron, drush (계획 중)를 통해
  • 필터가있는 파일 목록 개요 페이지
  • 뷰 통합
  • 파일 확인을위한 Drush 명령

뷰 결과를 내보내려면 views_data_export 모듈을 사용하는 것이 좋습니다.

따라서 할 수있는 일은 다음과 같습니다.

  • 사이트를 일부 개발 환경으로 복제 (복사)하지만 확인하려는 디렉토리의 파일은 복사하지 마십시오. 변형으로 (이 질문이 비 프로덕션 상태 사이트에 관한 경우) 모든 파일을 해당 디렉토리 밖으로 임시로 이동하십시오.
  • 파일 검사기 모듈을 사용하여 "누락 된"파일을 찾으십시오. 이러한 파일은 분명히 사용 되지 않는 파일입니다 . 그러나이 모듈이 주장하지 않는 파일은 ... 미사용입니다!
  • 누락 된 모든 파일을 확인하려는 디렉토리의 올바른 위치에 복사하면 디렉토리의 완벽한 컨텐츠를 단계별로 다시 작성합니다.

참고 :이 질문은 D7에 관한 것이지만 D8에 대한 (알파) 버전입니다.


내 문제를 해결하는 데 유용한 정보
kb8

2

불필요한 파일을 제거 하나 개의 모듈이 멋진 파일 삭제는 .

VBO 사용자 지정 작업을 통해 파일을 강제로 삭제하는 옵션이있는 모든 관리되는 파일보기 FID로 관리되는 파일을 수동으로 삭제 (및 원할 경우 강제로 삭제하는 옵션). 파일 관리 테이블에없는 기본 파일 디렉토리에서 사용하지 않는 파일을 삭제합니다. AKA는 모든 관리되지 않는 파일을 삭제합니다. 더 이상 노드 및 파일 사용량 테이블에 첨부되지 않은 전체 설치에서 사용되지 않는 파일을 삭제합니다. AKA는 모든 고아 파일을 삭제합니다.


1
대규모 작업과 vbo 모듈에 대한 나쁜 경험이 있습니다. 처음에는 Pierre.Vriens가 제안한 접근 방식을 사용합니다. 제안 모듈을 사용하여 파일 디렉토리를 깨끗하게 유지합니다.
kb8

0

사용하지 않는 파일을 삭제하여

  1. 다음 과 같은 쿼리 를 통해 file_managed 테이블 에서 수동으로 삭제하십시오.

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

  2. 파일 상태를 0으로 설정하면 임시 파일로 표시되므로 특정 시간이 지나면 cron이 해당 파일을 삭제합니다.
    $file = File::load ($fid); $file->setTemporary();


0

공상 파일 삭제 모듈은 나를 위해 전혀 작동하지 않았다. 보다 수동적 인 대안이 있습니다.

관리되는 파일 테이블에없는 폴더에서 파일을 삭제하려면 다음을 수행하십시오.

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변수를 파일을 삭제하려는 폴더의 경로로 변경하고 제외 파일의 경로를 업데이트하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.