Como abrir os primeiros 10 arquivos em uma pasta que começa com uma certa letra ou número?

0

Minha pasta tem 10.000 arquivos e preciso examinar todos eles. Eles são todos chamados: A0001.png, A0002.png, A0003.png, ... A0100.png, ... A0999.png, .. A1000.png, ... A09999.png, ... A10000.png .

Eu quero abri-los de dez em dez, olhar através deles, fechá-los e abrir os próximos dez, mas ainda estou me familiarizando com o uso do terminal, então não sei como fazer isso? / p>

Quando faço:

open A000*.png

Ele abre muitos.

    
por Guest 09.03.2017 / 20:09

2 respostas

2

Em zsh :

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

para os primeiros 10.

Em bash , você sempre pode fazer:

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

Ou em um loop:

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

Isso também funcionaria em zsh , embora em zsh você pudesse fazer isso com uma sintaxe um pouco menos difícil:

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

Outra opção é usar xargs :

printf '%s
autoload zargs # in ~/.zshrc
zargs -n 10 A000*.png -- open
' A000*.png | xargs -0n10 open

Embora isso afete o stdin de open . zsh tem uma função zargs com recursos semelhantes:

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

Isso permite que você defina o open como uma função que precisa fazer o que quiser com esses 10 arquivos, como:

open A000*.png([1,10])
    
por 09.03.2017 / 20:39
1

Usando um loop e capturando a entrada do usuário, isso pode ser obtido:

#!/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
    
por 09.03.2017 / 21:31