콘솔에 직접 입력하면 스크립트가 제대로 작동합니다.
N | find . -type f -iname "*.aac" -exec bash -c 'FILE="$1"; ffmpeg -i "${FILE}" -acodec libmp3lame "${FILE%.aac}.mp3";' _ '{}' \;
~/.zshrc
하지만 내 파일 에 별칭으로 추가하려고 하면 다음과 같습니다 .
alias aac-to-mp3="N | find . -type f -iname \"*.aac\" -exec bash -c 'FILE=\"$1\"; ffmpeg -i \"${FILE}\" -acodec libmp3lame \"${FILE%.aac}.mp3\";' _ '{}' \;"
그것은 다음을 생산합니다 :
✔ aac-to-mp3
_: N: command not found
ffmpeg version 4.4.1 Copyright (c) 2000-2021 the FFmpeg developers
built with Apple clang version 13.0.0 (clang-1300.0.29.3)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4.1_3 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-avresample --enable-videotoolbox
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
: No such file or directory
나는 그것을 N |
명령 자체로 옮겨 보았습니다.
alias aac-to-mp3="find . -type f -iname \"*.aac\" -exec bash -c 'FILE=\"$1\"; N | ffmpeg -i \"${FILE}\" -acodec libmp3lame \"${FILE%.aac}.mp3\";' _ '{}' \;"
그러나 동일한 출력이 생성됩니다.
각 별칭 변경 사이에 셸을 다시 시작했습니다.
이 스크립트를 별칭으로 사용하려면 어떻게 해야 합니까? 문제를 이해하지 못합니다.
답변1
별칭에는 매개변수를 사용할 수 없습니다. 여기에 기능이 필요합니다. 또한 쉘 변수 이름에 대문자를 사용하지 마십시오. 관례적으로 전역 환경 변수는 대문자이므로 자신의 변수 이름에 대문자를 사용하면 예기치 않은 오류가 발생할 수 있습니다. 파일 에 다음을 추가해 보세요 ~/.zshrc
.
aac-to-mp3(){
find . -type f -iname "*.aac" -exec \
bash -c 'file="$1"; ffmpeg -n -i "$file" -acodec libmp3lame "${file%.aac}.mp3";' _ '{}' \;
}
ffmpeg의 -n
옵션은 모든 프롬프트에 응답하므로 N
이를 전달하려고 시도할 필요가 없습니다 N
( N |
비록 작동하지 않는 방식이지만 ffmpeg가 수행하려는 작업입니다).
답변2
명령에는 별칭을 정의할 때 큰따옴표를 사용하여 확장된 매개변수가 포함되어 있습니다. 별칭으로 인용하려면 작은따옴표를 사용해 보세요.
alias aac-to-mp3='N | find . -type f -iname "*.aac" -exec bash -c '\''FILE="$1"; ffmpeg -i "${FILE}" -acodec libmp3lame "${FILE%.aac}.mp3";'\'' _ '\''{}'\'' \;'
하지만 아마도 zsh를 사용해야 할 것입니다. 아마도:
aac-to-mp3 () {
setopt localoptions extendedglob
local f
for f (**/*.(#i)aac(ND.)) {
ffmpeg -n -i $f -c:a libmp3lame $f:r.mp3
}
}
이것은 "파일 덮어쓰기"에 대해 "아니요"라고 말하는 것과 N
같다고 가정합니까? yes n
팁 ffmpeg
, 이 경우 ffmpeg의 옵션을 사용할 수 있습니다 -n
.