2013-08-14 2 views
0

gawk에서 처리하고 싶은 파일 목록이 있습니다. 여기 내 명령입니다파일 이름에 공백과 gawk 사용

ls -1 *.wma | gawk '{printf("ffmpeg -i %s track4-%s.mp3\n",$0, $1);}' 

그러나 원래 파일 이름에 공백이 포함되어 있기 때문에, 나는 공간이 탈출하지 않는 한 작동하지 않습니다

ffmpeg -i 02 Track 2.wma track4-02.mp3 

같은 명령을 얻는다. 어떤 아이디어가이 권리를 얻는 방법?

예상 출력 그것은 useless and buggy use of ls

ffmpeg -i 02\ Track\ 2.wma track4-02.mp3 
+0

아마도 당신이 찾고 있습니다 : http://linux.die.net/man/1/xargs – technosaurus

답변

0

해야한다, 대신 을 사용하여이 시도 :

for file in *.wma; do 
    mp3=$(sed -r '[email protected]([0-9]+)\s+Track\s+[0-9]+\[email protected]\[email protected]' <<< "$file") 
    ffmpeg -i "$file" "$mp3" 
done 

ls 대화 형으로 파일 정보를보고하기위한 도구입니다. 그 출력물은 사람을 위해 포맷되고 스크립트에 버그를 일으킬 것입니다. globs를 사용하거나 대신 찾습니다. 이유를 이해 : http://mywiki.wooledge.org/ParsingLs

+0

하지만 난 MP3로 wma를 대체하고 싶지 않아. 업데이트 된 질문보기 정확하지 않은 것에 대해 유감입니다. – Alex

+0

내 편집 된 게시물 –

+0

보기 이것은 불행히도 작동하지 않습니다. 'ffmpeg -i 01 Track 1.wma'와 같은 명령을받습니다. – Alex

0

파일 이름의 공백을 없애고 파일 이름을 겉으로보기에 단순하게 변환하는 쉬운 방법이 없다고 생각합니다. 필자에게 파이썬으로 작동하는 3 행 솔루션을 사용합니다 :

import glob 
for filename in glob.glob("*.wma"): 
    print "ffmpeg -i {0} track4-{1}.mp3".format(filename.replace(' ','\ '),filename[:2]) 

저는 파이썬에서이 작업을 수행하는데 2 분이 걸렸습니다. Bash는이 간단한 작업에 적절하지 않은 것처럼 보입니다.