(내 생각에는) 약간의 스크립팅 마법이 필요한 문제가 있지만 무엇이 최선인지는 잘 모르겠습니다...
jpg, gif, png, tiff, svg 등 다양한 형식의 이미지가 포함된 디렉토리가 있습니다.
일부(모두는 아닙니다!) png와 svg 파일은 쌍으로 제공됩니다. 동일한 이미지의 png 및 svg 버전으로, 파일 이름은 동일하고 접미사만 다릅니다(예: figleaf.png 및 Figleaf.svg).
(에서 만든) 파일 목록을 가져오고 ls
모든 트윈 svg 버전을 제거하고 png 버전만 남겨 두려면 스크립트가 필요합니다. png-twin이 없는 svg 파일을 포함하여 다른 모든 파일(트윈이 아님)은 목록에 남아 있어야 합니다(트윈의 png 버전도 마찬가지). 또는 모든 svg 파일 목록을 생성하는 해당 png-twin 스크립트를 사용하십시오.
일부 트윈 버전은 서로 약간 다를 수 있다고 생각합니다. Figleaf.png 및 FigLeaf.svg - 스크립트가 가능하다면 좋을 것입니다.선택적으로대소문자를 무시하도록 변경되었습니다.
답변1
bash/ksh를 사용하여 이 작업을 수행할 수 있습니다.
for i in *.svg; do test -e "${i%.*}.png" && rm "$i"; done
또는 다른 형식으로:
for i in *.svg; do
test -e "${i%.*}.png" && rm "$i"
done
실제 삭제를 수행하기 전에 테스트로 교체하십시오 rm
.echo
편집하다:
Sputnick은 그의 답변에서 이와 매우 유사한 솔루션을 편집했습니다. 그가 처음으로 답변한 것이므로 그의 솔루션을 수락해야 합니다.
답변2
다음을 사용하여 이 작업을 수행해 보세요.진주:
( i
대소문자를 구분하려면 대체 항목에서 수정자를 제거하세요)
$ perl -e '
foreach my $file (<*.png>) {
($ext_free = $file) =~ s/\.png//i;
unlink "$ext_free.svg" if -e "$ext_free.svg";
}
' *.[Pp][Nn][Gg]
먼저 시험해 보려면 print
.unlink
또는 사용세게 때리다:
shopt -s nocaseglob # case insensitive
# use 'shopt -u nocaseglob' for case sensitive
for file in *.png; do
[[ -e ${file%.png}.svg ]] && rm -f "${file%.png}.svg"
done