이름은 같지만 확장자가 다른 파일 목록을 정렬하는 방법

이름은 같지만 확장자가 다른 파일 목록을 정렬하는 방법

.doc파일과 파일이 들어 있는 .pdf폴더 가 있습니다 . 그 중 일부는 test.doc및 와 같이 이름이 동일합니다 test.pdf. 버전이 더 이상 필요하지 않으므로 버전만 유지하도록 .doc(실제로 중복이 존재하는 경우) 폴더를 정렬하고 싶습니다..pdf

답변1

mkdir -p PDF
for f in *.pdf ; do
    bn=$(basename -- "$f" .pdf)
    [ -e "$bn.doc" ] && mv -- "$f" PDF/
done

나는 당신에게 맡길 것입니다 rm -rf PDF/. 나는 잠재적으로 위험한 절차에서 되돌릴 수 없는 단계를 가능한 한 늦게 남기고 싶습니다.

직접 삭제하려면 다음을 수행하세요.

for f in *.pdf ; do
    [ -e "$(basename -- "$f" .pdf).doc" ] && rm -f -- "$f"
done

이 버전에서는 중간 변수 "$bn"을 설정할 필요가 없습니다. 어느 쪽이든 작동합니다... 제 생각에는 전자가 더 "읽기 쉬우며" 파일의 기본 이름을 다른 용도로 사용하는 경우에도 더 좋습니다.

답변2

노력하다

for i in `ls | awk '{print $1}' | cut -d'.' -f1 | uniq -d`
do
   rm -r $PWD/$i".pdf"
done

경고: 파일 이름에는 점(.)(예: Finename.extension)만 포함되어야 하며, 동일한 코드 조각을 실행하는 경우 동일한 디렉터리에서 실행되어야 합니다.

답변3

폴더를 "정렬"하여 파일을 삭제하는 것은 의미가 없습니다. 파일 이름별로 정렬하거나 ls -bU | sort목록을 처리하여 원하지 않는 파일을 제거할 수 있습니다.

  1. DOC가 포함된 모든 PDF 파일 삭제

    for d in *.doc; do p="${d/%.doc/.pdf}"; test -f "$p" && rm -f "$p"; done
    
  2. 모든 PDF 파일 삭제

    rm -f *.pdf
    

두 변종 모두 공백 및 기타 이상한 문자가 포함된 파일 이름을 처리합니다. 를 교체하여 rm솔루션을 테스트 할 수 있습니다 echo rm.

답변4

그리고 zsh:

doc_base=(*.doc(:r)) && rm -f -- $^doc_base.pdf

또는:

setopt histsubstpattern # could go in ~/.zshrc
rm -f -- *.doc(:s/%doc/pdf)

기본 이름은 동일하지만 확장자(doc 또는 기타)가 다른 PDF 파일이 있는 경우 모든 PDF 파일을 삭제하려면:

setopt histsubstpattern extendedglob
rm -f -- *.*~*.pdf(:r:s/%/pdf)

관련 정보