我的文件夹有 10,000 个文件,我需要查看所有文件。它们都被称为:A0001.png,A0002.png,A0003.png,...A0100.png,...A0999.png,.. A1000.png,...A09999.png,...A10000.png 。
我想一次打开十个,浏览它们,关闭它们,然后打开下一个十个,但我仍在熟悉如何使用终端,所以我不知道该怎么做?
当我做:
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