コンソールに直接入力すると、スクリプトは正しく機能します。
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
。