특정 문자나 숫자로 시작하는 폴더의 처음 10개 파일을 여는 방법은 무엇입니까?

특정 문자나 숫자로 시작하는 폴더의 처음 10개 파일을 여는 방법은 무엇입니까?

내 폴더에 10,000개의 파일이 있는데 모두 확인해야 합니다. 모두 A0001.png, A0002.png, A0003.png, ...A0100.png, ...A0999.png, ...A1000.png, ...A09999.png, ...A10000이라고 합니다. png.

10개씩 열어서 찾아보고 닫고 다음 10개를 열고 싶은데 아직 터미널 사용법이 익숙해지는 단계라 어떻게 해야할지 모르겠네요?

내가 할 때 :

open A000*.png

너무 많이 열어

답변1

존재하다 zsh:

open A000*.png([1,10])

처음 10개.

에서는 bash언제든지 다음을 수행할 수 있습니다.

files=(A000*.png)
open "${a[@]:0:10}"

또는 루프에서:

while ((${#files[@]})); do
  open "${files[@]:0:10}"
  files=("${files[@]:10}")
done

이는 에서도 작동 zsh하지만 에서는 zsh약간 덜 어색한 구문을 사용하여 수행할 수 있습니다.

while (($#files)) {
  open $files[1,10]
  files[1,10]=()
}

또 다른 옵션은 다음을 사용하는 것입니다 xargs.

printf '%s\0' A000*.png | xargs -0n10 open

이는 open표준 입력에 영향을 미칩니다. 비슷한 특성을 가진 함수가 zsh있습니다 .zargs

autoload zargs # in ~/.zshrc
zargs -n 10 A000*.png -- open

open이렇게 하면 해당 10개 파일로 원하는 모든 작업을 수행하는 함수로 정의할 수 있습니다 . 예를 들면 다음과 같습니다.

open() {
  image_viewer $argv
  read -q '?continue? ' || return 255
}

답변2

루프를 사용하고 사용자 입력을 캡처하면 다음을 얻을 수 있습니다.

#!/bin/bash

# Store all list of files you want with extension png
arr=(./*.png)
for ((i=0; i<${#arr[@]};))
do
    # -s: do not echo input character
    # -n 1: read only 1 character (separate with space)
    read -s -n 1 key 

    for ((j=0; j<10; j++, i++))
    do  
        if [[ $key = "" ]]; then 
            open "${arr[$i]}";    # <--- This is where you will open your file.
        fi
    done
done

관련 정보