명령줄에서 파일 형식을 선호하세요

명령줄에서 파일 형식을 선호하세요

나는 종종 여러 PDF 문서에 주석을 달기 위해 그것을 사용해야 합니다 xournal. "새" 파일이 있는 디렉토리에서 시작하면 다음 pdf을 사용하여 파일을 엽니다 xournal.

for f in *pdf; do xournal $f&; done

.pdf파일에 주석을 달기 시작할 때 파일을 로 저장한다고 가정해 보겠습니다 .xoj. 즉, 파일 확장자를 바꾸기만 하면 됩니다. 이제 중단된 세션이 있고 해당 파일이 없으면 .pdf디렉터리의 모든 파일을 열고 , 그렇지 않으면 파일을 엽니다(둘 다 사용하여 )..xoj.xojxournal

명령줄에서 이 작업을 어떻게 수행할 수 있나요?

답변1

.pdf확장자가 없는 파일 이름을 삭제하고 확장자가 있는 해당 이름의 파일을 확인하려면 삭제할 수 있습니다 .xoj.

for f in *.pdf
do
    if [ -f "${f%.pdf}".xoj ]
    then
        xournal "${f%.pdf}".xoj &
    else
        xournal "${f}" &
    fi
done

답변2

for f in *.pdf; do
  fname=$(basename "$f" .pdf);
  if [[ -e "${fname}".xoj ]]; then
    # .xoj file does exist, do things here
  else
    # .xoj file doesn't exist, do other things here
  fi
done

답변3

당신 과 함께 zsh당신은 사용할 수 있습니다e 글로벌 예선:

for f (./*.pdf(.e_'[[ ! -f $REPLY:r.xoj ]] || REPLY=$REPLY:r.xoj'_))
xournal $f &

이 문자열은 [[ ! -f $REPLY:r.xoj ]] || REPLY=$REPLY:r.xoj쉘 코드로 실행됩니다. REPLY현재 매개변수 값을 저장합니다. .xoj현재 파일에 해당 파일이 없으면 반환 .pdf되고 [[ ! -f $REPLY:r.xoj ]]아무 true일도 일어나지 않습니다( REPLY변경되지 않은 상태로 유지됨).
현재 파일에 해당 파일이 존재 하면 반환하고 실행하며 (수정자를 통해) 현재 매개 변수의 확장자를 ..xoj.pdf[[ ! -f $REPLY:r.xoj ]]falseREPLY=$REPLY:r.xoj:r.pdf.xoj

답변4

단지 명확하고 간결하게 설명하려고 노력하고 있습니다. xournal은 한 곳에서만 재할당 f되고 호출되며 확장 장식은 한 번만 액세스됩니다 ${f%.pdf}.

for f in *.pdf
do
    xoj = "${f%.pdf}.xoj"
    [ -f "$xoj" ] && f="$xoj"
    xournal "$f" &
done

관련 정보