特定の文字または数字で始まるフォルダの最初の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

関連情報