.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
목록을 처리하여 원하지 않는 파일을 제거할 수 있습니다.
DOC가 포함된 모든 PDF 파일 삭제
for d in *.doc; do p="${d/%.doc/.pdf}"; test -f "$p" && rm -f "$p"; done
모든 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)