Cria uma variável baseada na ordem em que um arquivo está em uma lista alfabética de arquivos

2

Sou muito novo no bash shell scripting game, mas venho aprendendo muito bem. Estou escrevendo um script agora para a edição automatizada de dados id3 ou arquivos mp3. Atualmente estou usando o programa de linha de comando id3v2. Estes são arquivos de mp3 que são provenientes de um programa de scanner da polícia que tenho gravação. Eu estou querendo saber se existe uma maneira de fazer uma variável relacionada ao número do arquivo ... você sabe que não tenho certeza como dizer isso. Desculpe, estava lutando contra uma dor de cabeça nos últimos dias. Eu posso explicar isso assim.

Então, se eu estivesse em um diretório de gravações, eu poderia facilmente listá-las em ordem, porque a hora em que elas foram gravadas é parte do nome do arquivo. Então, um comando ls geral produziria algo como

File_012030.mp3
File_012040.mp3
File_012045.mp3

Eu gostaria de usar uma variável para atribuir o número da trilha a cada arquivo de dados id3. Meu primeiro pensamento é de alguma forma usar o número de quão baixo está na lista de arquivos nesse diretório. Então, o exemplo acima seria.

File_012030.mp3 <- 01
File_012040.mp3 <- 02
File_012045.mp3 <- 03

Isso é algo que seria possível?

    
por Jack black 25.03.2017 / 00:45

2 respostas

3

Use apenas um loop e um contador:

k=1; for file in *mp3; do
        id3v2 --track "$k" "$file"
        ((k++))
     done

Isso itera todos os arquivos e diretórios cujo nome termina em mp3 , salvando cada um como $file . Em seguida, a variável $k é incrementada uma vez por iteração ( ((k++)) ), então $k será o número do arquivo na ordem em que você processa e você pode usar --track "$k" para definir o número da faixa.

    
por 25.03.2017 / 01:09
1

Pode ser tão simples quanto (funciona mesmo com nomes de arquivos que usam novas linhas):

arr=(*)

Todos os nomes de arquivos em pwd serão armazenados em uma matriz e acessados por seu número, por exemplo: "${arr[2]}" .

O asterisco é muito semelhante ao ls, tente echo * ou, para selecionar mp3, tente echo *.mp3 para vê-lo em ação.

Você pode ver uma lista de todos os arquivos com:

printf '%s\n' "${arr[@]}"

Então você pode usar um loop para processar cada nome de arquivo:

for (( i=0 ; i<${#arr[@]} ; i++ )); do
    id3v2 --track "$((i+1))" "${arr[@]}"
done
    
por 25.03.2017 / 18:04