(안녕하세요 여러분! 이곳에 처음으로 글을 올리기 때문에 여러분께 특별히 인사드립니다.)
.webp 및 .png 이미지와 같은 폴더 및 하위 폴더의 MIME 유형을 기반으로 파일을 삭제하는 명령을 사용하고 싶습니다. 내 컴퓨팅 지식은 거의 0이지만 확장 기능을 기반으로 제거했습니다.
먼저 원하는 폴더로 이동합니다.
cd /my-folder
그 다음에:
find \( -iname "*.webp" -o -iname "*.png" \) -print0 | xargs -0 rm -f
누군가 이미 다른 포럼에서 답변을 줬고 명령은 작동하지만 70개 파일에 대해 10초 정도 느려서 사용할 수 없습니다.
while read -d '' Fichier
do
MimeType=$(mimetype --output-format %m "$Fichier")
[[ "${MimeType}" == @(image/webp|image/png) ]] && echo rm "$Fichier"
done < <(find . -type f -print0)
이건 정말 "쉬운" 작업인 것 같습니다...
답변1
exiftool
특정 MIME 유형으로 식별된 파일을 보고하는 데 사용할 수 있습니다.
exiftool -q -r. -ext '*' -if '
print "$FilePath\0" if $MIMEType =~ m{^image/(webp|jpeg)$}; 0' . |
xargs -r0 echo rm
( echo
올바르게 보이면 삭제)
-q
: 조용한-r.
:재귀 검색(숨겨진 디렉토리 포함)(디렉토리에 대한 심볼릭 링크를 따릅니다!)-ext '*'
:알려진 확장자를 가진 파일을 제한하지 마세요.-if 'perl code'
: 코드가 true를 반환하는 파일에 대한 정보만 보고합니다. 여기서는;0
NUL로 구분된 파일 경로를 인쇄하려고 하고print
코드를 호출하여 이를 수행하므로 파일이 선택되지 않도록 return false를 추가합니다. 이렇게 하면-if '$MIMEType eq "image/webp"' -s3 -FilePath
줄바꿈으로 구분된 경로가 인쇄됩니다. 줄바꿈은 파일 경로의 모든 문자만큼 유효하기 때문에 안정적으로 사후 처리할 수 없습니다.
또는 exiftool
파일 자체를 삭제할 수도 있습니다.
exiftool -q -r. -ext '*' -if '
if ($MIMEType =~ m{^image/(webp|jpeg)$}) {
print STDERR "Deleting $FilePath\n";
unlink $FilePath or print STDERR "Failed: $!\n";
}
0' .
답변2
테스트를 병합할 수 있습니다.
find -type f \( -iname "*.webp" -o -iname "*.png" \) \
-exec bash -c 'grep image <<<"$(mimetype -b "$1")"' bash {} \; \
-delete
할 수 있는 작업:
행: 파일( )만 검색하고 또는로
type f
끝나는 이름으로 필터링합니다 ..webp
.png
행: bash 스크립트를 실행합니다. 여기서
2.1.
mimetype b "$1"
매개변수 번호의 MIME 유형을 반환합니다. 1 스크립트에서만 가능합니다.-b
다음 문자열 검색에 이름에 "image"가 포함된 파일도 포함되지 않도록 파일 이름 반환을 건너뜁니다.2.2.
grep
반환된 mimetype에서 "image" 문자열을 검색하려면 ;를 사용하세요. 문자열이 발견되면grep
성공합니다(종료 상태).0
find
2.3 명령 대체가 ; 에서는 제대로 작동하지 않기 때문에 이 모든 내용을 bash 스크립트에 포함해야 합니다. bash 매개변수 번호는0
` 로 시작됩니다.bash -c 'script' arg0 arg1 arg2 ...', hence the extra
행은 성공한 이전 명령의 모든 항목을 제거합니다. 대신 어떤 파일이 영향을 받는지 보여주는 테스트 실행을
-delete
수행 할 수도 있습니다.-print
find | xargs rm
그리고 귀하의 질문에 있는 - 조합에 대한 팁은 다음과 같습니다.
find
자체 제거 도구가 있습니다.
find -name '*png' ....<other refinements> ... -delete
하지만 조심하고 -delete
마지막에만 남겨두세요. 나는 이것을 오래 전에 어렵게 배웠습니다…
답변3
file
mimetype
아마도 ¹ 또는 exiftool
작성한 것 보다 더 효율적일 것입니다 perl
. 특히 많은 파일에 대해 한 번 호출하는 경우 다음을 수행할 수 있습니다.
find . -type f -exec file -00 --mime-type {} + |
perl -0lne '$file = $_; chomp($type = <>);
print $file if $type =~ m{^image/(webp|jpeg)\z}' |
xargs -r0 echo rm
print $file
대신 unlink $file
해당 부분을 수행하고 건너뛸 수 있습니다 .| xargs rm
find . -type f -exec file -00 --mime-type {} + |
perl -0lne '$file = $_; chomp($type = <>);
if ($type =~ m{^image/(webp|jpeg)\z}) {
warn "Deleting $file\n";
unlink $file or warn "Failed: $!\n"
}'
내 테스트에서는 mimetype
UTF-8이 아닌 인코딩된 텍스트에 대한 파일 경로를 처리하는 데 어려움이 있는 것으로 보이므로 임의의 파일 경로가 처리되지 않을 수 있습니다.