BASH: loop através de ls [duplicado]

1

Estou com problemas com este trecho de código:

22 for filename in "$( ls "$1" | grep ".*\.flac$" )"; do
23                 file_path="$1${filename}"
24                 ffmpeg -i "${file_path}" -f ffmetadata $HOME/metadata

Em vez de um arquivo de metadados em cada iteração, recebo esta mensagem de erro:

Downloads/Ariel Pink's Haunted Graffiti - Worn Copy (2005)/01 Trepanated Earth.flac ... 17 Jagged Carnival Tours.flac: File name too long

Portanto, parece que dentro do loop a variável $ filename é igual aos nomes de todos os arquivos FLAC agrupados.

É claro que omitir aspas na linha 22 resulta em problemas de espaço em branco.

Como faço isso funcionar? Eu sou novo para bater e muito confuso.

    
por zvukva 14.03.2015 / 11:24

1 resposta

1

que tal

 for filepath in "$1/"*.flac 
 do
      ffmpeg -i "${file_path}" -f ...

onde

  • "$1/"*.flac garantirá o sufixo .flac no final
  • não deixe de citar "${file_path}"
  • nome da base pode ser encontrado usando bn=$(basename "${file_path}")
  • basename des flacado pode ser encontrado usando bnnf=$(basename "${file_path}" .flac)

amostra

A > ls -l Music 
total 0
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 foo bar
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 foo bar.flac
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 fubar
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 fubar.flac

agora é executado:

 A > for f in Music/*.flac; do echo $f; ls -l "$f" ; done 
Music/foo bar.flac
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 Music/foo bar.flac
Music/fubar.flac
-rw-rw-r-- 1 Arc Arc 0 Mar 14 03:37 Music/fubar.flac
    
por 14.03.2015 / 11:40