더 적은 키 입력으로 여러 파일 이름을 입력하는 방법


16

imagemagick pdf를 사용하여 png이미지를 이미지 로 변환 하려면 다음과 같이하십시오.

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf this_is_a_very_long_filename_of_my_pdf_file.png

pdf 파일은 종종 어떤 이유로 파일 이름이 매우 길며 png확장자를 제외하고 파일 이름이 동일해야합니다.

보통 나는 선택 this_is_a_very_long_filename_of_my_pdf_file.pdf탭을 통해 두 번 및 zsh-menu다음 변경 pdfpng두 번째 인수에 대해 수동으로.

그러나 더 빠른 방법이 있습니까?

답변:


23

중괄호 확장을 사용할 수 있습니다 .

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.{pdf,png}

1
파일 이름 자동 완성을 참고할 수도 있습니다 (zsh에 존재합니까?)
Ruslan

@Ruslan OP는 자동 완성을 사용한다고 말했습니다. 그러나 여전히 좋은 시간 절약 포인트.
Cammy_the_block

5

mogrify를 호출하면 pdf를 덮어 쓰는 대신 새 png 파일이 만들어집니다.

mogrify -trim density 400 -format png th*.pdf

th * .pdf의 경우 적절한 수의 문자를 사용하여 이름이 올 때까지 올바른 파일을 선택하거나 더 나은 탭 완성을 선택하십시오.

이 방법으로 전체 명령의 별명을 png 매개 변수까지 만들 수 있습니다.


5

파일 이름과 같이 작은 변형으로 항상 동일한 명령을 사용하면 함수를 작성할 수 있습니다.

pdf2png() { convert -trim -density 400 "$1" "$1:r.png" }

(이 기능은 특정 기능 zsh) 및 변환하려는 각 파일 your_file.pdf에 대해 :

pdf2png your_file.pdf

참고 1 : 다른 셸에 대해 같은 종류의 함수를 작성할 수 있지만 조금 더 복잡합니다.

참고 2 :을 사용 zsh하면 SH_WORD_SPLIT옵션이 설정된 경우에만 따옴표가 유용합니다 (기본값이 아님).


4

변수를 사용하여 파일 이름을 저장하십시오. 그들은 또한 자동 완성 :

f="this_is_a_very_long_filename_of_my_pdf_file"
convert -trim -density 400 "$f.pdf" "$f.png"

때로는 공백이 물기 때문에 따옴표를 사용합니다.

이것의 중요한 이점은 다음과 같습니다.

  1. 올바른 파일을 가리키는 $ f의 값으로 추가 작업을 수행 할 수 있습니다.
  2. 이것을 꽂는 것이 가장 짧은 홉입니다. cat listOfFiles | while read f; do ... ; done루프 구조 입니다.
  3. 자동 생성 된 파일 이름은 종종 매우 유사하며 자동 완성 기능을 사용하면 매우 성가 시게됩니다 abc<tab>d<tab>x<tab>2<tab>. 이렇게하면 한 번만 입력하면 최신 파일 또는 가장 큰 파일을 선택할 수 있습니다. f=\ls -t 와 같은 스크립트를 통해 | head -1 '', 먼저 검색을 실행하는 대신 파일 이름을 찾고 훈련 된 원숭이와 같은 형식으로 파일을 작성하십시오.

2

히스토리 확장 을 사용 하여 현재 명령 행에서 단어를 참조 할 수도 있습니다 .

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf !#:$:r.png
  • 이벤트 지정 !# 자는 지금까지 입력 한 명령 줄을 나타냅니다.
  • 단어 지정 $ 자는 마지막 단어를 나타냅니다 (확장 전)
  • 수정 r 자는 파일 확장자를 제거합니다. 이것은 또한 텍스트의 끝을 표시하며, 이력 확장이 발생하면 대체됩니다.
  • .png새로운 확장입니다. 이것은 확장 자체에 속하지 않습니다.

이 줄이 실행되면 !#:$:rpdf 파일 이름에서 확장자를 뺀 값으로 바뀌어 질문에서 명령을 만듭니다.

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf this_is_a_very_long_filename_of_my_pdf_file.png

그런 다음이 줄이 직접 실행됩니다.

히스토리 확장 후 명령을 확인하려면 실행 전에

setopt histverify

이렇게하면 확장 된 라인이 실행 버퍼 대신 실행 버퍼로 다시로드됩니다.

참고 : 다른 확장과 달리, 명령이 기록에 저장되기 전에 기록 확장이 수행됩니다. 그래서 echo !#다음과 같이 표시됩니다 echo echo으로서가 아니라 echo !#당신의에서 $HISTFILE.


2

이 특별한 예에서는 괄호 확장을 사용할 수 없습니다. 그러나 좀 더 융통성있는 zle widget copy-prev-shell-word은 이름에서 제안하는 것을 수행하며 비슷한 것을 원할 때 편리합니다. 수행하며 이전 인수 체계적으로 파생 할 수없는 합니다.

위젯을 CTRL+W다음과 같이 바인드하십시오 .

bindkey '^W' copy-prev-shell-word

나만큼 게으른 경우이 바인드 키 시퀀스를 사용하십시오.

bindkey '^W^W' copy-prev-shell-word
bindkey -s '^W' ' ^W^W'

다음과 같은 동작을 얻으려면 :

  • CTRL+W앞의 쉘 단어를 공백으로 삽입합니다 (따라서 하나의 키 입력을 저장하십시오!)
  • CTRL+W CTRL+W 이전 쉘 단어를 직접 삽입
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.