私のフォルダには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