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

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

종종 xournal. "새" 파일 디렉터리로 시작하는 경우 다음을 pdf사용하여 해당 파일을 모두 엽니다 xournal.

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

파일에 주석을 달기 시작할 때 a라고 말하면 .pdf파일을 로 저장합니다 .xoj. 즉, 파일 확장자를 전환하기만 하면 됩니다. 이제 중단된 세션이 있고 .pdf해당 파일이 없는 경우 디렉터리의 모든 파일을 열고 그렇지 않으면 파일을 .xoj열고 싶다고 가정합니다 .xoj(둘 다 xournal).

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

답변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

관련 정보