BASH: 루프 ls [반복]

BASH: 루프 ls [반복]

이 코드에 문제가 있습니다.

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

각 반복에 대한 메타데이터 파일 대신 다음과 같은 오류 메시지가 나타납니다.

다운로드/Ariel Pink의 Haunted Graffiti - Worn Copy (2005)/01 Trepanated Earth.flac...17. 들쭉날쭉한 카니발 투어.flac:파일 이름이 너무 깁니다.

따라서 루프 내부의 $filename 변수는 함께 묶인 모든 FLAC 파일의 이름과 동일한 것으로 나타납니다.

물론 22행에서 따옴표를 생략하면 공백 문제가 발생합니다.

이 작업을 어떻게 수행합니까? 나는 bash를 처음 접했고 매우 혼란 스럽습니다.

답변1

어때요?

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

어디

  • "$1/"*.flac마지막으로 .flac 접미사가 보장됩니다.
  • 꼭 인용하세요"${file_path}"
  • 기본 이름은 다음 명령을 사용하여 찾을 수 있습니다.bn=$(basename "${file_path}")
  • 태그가 지정되지 않은 기본 이름은 다음을 사용하여 찾을 수 있습니다.bnnf=$(basename "${file_path}" .flac)

견본

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

이제 다음을 실행하세요.

 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

관련 정보