공용 파일 시스템과 테마 디렉토리 내에있는 사용하지 않는 모든 파일을 나열하고 나열하거나 자동으로 삭제하는 옵션이있는 방법이 있습니까?
나는 현재 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 % 동기화됩니다. 그러나 일부 디스크 오류로 인해 파일 시스템의 일부가 손상된 경우 어떻게해야합니까? 아니면 모듈 중 하나가 데이터베이스와 파일을 엉망으로 만들었습니까? 아니면 배포 스크립트가 혼란 스러웠습니까? 그러면이 모듈을 사용하여 동기화되지 않은 파일을 모니터링하고 찾을 수 있습니다.
기본적으로 파일 테이블에는 임시 (0) 및 영구 (1)의 두 가지 상태가 있습니다. 파일 검사기는 추가 상태 누락 (2)을 도입합니다. 다양한 방법으로 트리거 할 수있는 검증 프로세스의 범위에서 파일 테이블의 상태 열이 업데이트됩니다.
풍모
- 검증 프로세스 실행 : 요청시, cron, drush (계획 중)를 통해
- 필터가있는 파일 목록 개요 페이지
- 뷰 통합
- 파일 확인을위한 Drush 명령
뷰 결과를 내보내려면 views_data_export 모듈을 사용하는 것이 좋습니다.
따라서 할 수있는 일은 다음과 같습니다.
참고 :이 질문은 D7에 관한 것이지만 D8에 대한 (알파) 버전입니다.
불필요한 파일을 제거 하나 개의 모듈이 멋진 파일 삭제는 .
VBO 사용자 지정 작업을 통해 파일을 강제로 삭제하는 옵션이있는 모든 관리되는 파일보기 FID로 관리되는 파일을 수동으로 삭제 (및 원할 경우 강제로 삭제하는 옵션). 파일 관리 테이블에없는 기본 파일 디렉토리에서 사용하지 않는 파일을 삭제합니다. AKA는 모든 관리되지 않는 파일을 삭제합니다. 더 이상 노드 및 파일 사용량 테이블에 첨부되지 않은 전체 설치에서 사용되지 않는 파일을 삭제합니다. AKA는 모든 고아 파일을 삭제합니다.
공상 파일 삭제 모듈은 나를 위해 전혀 작동하지 않았다. 보다 수동적 인 대안이 있습니다.
관리되는 파일 테이블에없는 폴더에서 파일을 삭제하려면 다음을 수행하십시오.
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
변수를 파일을 삭제하려는 폴더의 경로로 변경하고 제외 파일의 경로를 업데이트하십시오.