대상 파일 이름에서 ".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