기본 이름이 예상대로 작동하지 않습니다.

기본 이름이 예상대로 작동하지 않습니다.

대상 파일 이름에서 ".mkv"를 사라지게 만드는 방법은 무엇입니까?

$ echo a/b.mkv | xargs -I % echo ffmpeg -i "%" $(basename "%" ".mkv").mp4
ffmpeg -i a/b.mkv a/b.mkv.mp4

답변1

너무 일찍 실행하는 것이 아니라 너무 일찍 실행하는 것 basename입니다 . basename "%" ".txt"노력하다:

echo a/b.mkv | xargs -I % sh -c 'echo ffmpeg -i "%" $(basename "%" ".mkv").mp4'

주요 목표 basename는 디렉토리 부분을 제거하는 것입니다. GNU basename(1) 매뉴얼 페이지에는 "파일 이름에서 디렉토리 및 접미사를 제거하십시오"라고 나와 있으므로 예상대로 작동합니다. 디렉토리 부분을 유지하려면 다음을 수행하십시오.

echo a/b.mkv | xargs -I % sh -c 'echo ffmpeg -i "%" $(dirname "%")/$(basename "%" ".mkv").mp4'

예를 들어 다음과 같은 다른 솔루션이 있습니다 sed.

$ echo a/b.mkv | sed 's/\.mkv$/.mp4/'
a/b.mp4

관련 정보