如何打开以某个字母或数字开头的文件夹中的前10个文件?

如何打开以某个字母或数字开头的文件夹中的前10个文件?

我的文件夹有 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

相关内容