접미사가 다른 "중복"을 제거하여 파일 목록을 만듭니다.

접미사가 다른 "중복"을 제거하여 파일 목록을 만듭니다.

(내 생각에는) 약간의 스크립팅 마법이 필요한 문제가 있지만 무엇이 최선인지는 잘 모르겠습니다...

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

관련 정보