![BASH: 루프 ls [반복]](https://linux55.com/image/5058/BASH%3A%20%EB%A3%A8%ED%94%84%20ls%20%5B%EB%B0%98%EB%B3%B5%5D.png)
이 코드에 문제가 있습니다.
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