Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: alternative method for a simple for
- X-seq: zsh-users 14380
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: <zsh-users@xxxxxxxxxx>
- Subject: Re: alternative method for a simple for
- Date: Tue, 15 Sep 2009 02:00:07 -0700
- In-reply-to: <20090915125419.3528@binki>
- Mailing-list: contact zsh-users-help@xxxxxxxxxx; run by ezmlm
- References: <20090915125419.3528@binki>
On Sep 15, 12:54pm, d.henman wrote:
}
} (Method 1.) Note that I could not not use this method as shown below
} $ zmv -p ffmpeg -o " -b 160k -i" '(*).wav' '$1.mp3'
}
} because it puts two hypens, "--", between -i and filename, as below:
} ffmpeg -b 160k -i -- song1.wav song1.mp3
} ffmpeg -b 160k -i -- song2.wav song2.mp3
Yes, as the zmv doc says:
-p PROGRAM
Call PROGRAM instead of cp, ln or mv. Whatever it does, it
should at least understand the form
PROGRAM -- OLDNAME NEWNAME
where OLDNAME and NEWNAME are filenames generated by zmv.
So you need to satisfy those constraints.
function wav2mp3 {
[[ "$1" == "--" ]] && shift
ffmpeg -b 160k -i ffmpeg -b 160k -i "$@"
}
zmv -p wav2mp3 '(*).wav' '$1.mp3'
} --------
}
} (Method 2.) Likewise I could not use zargs, yet at least,
} because replacements or expansions //l/r or :r didn't seem to work..
}
} $ zargs --replace=arg -e.. -- *.wav .. ffmpeg -b 160k -i arg ${${file::=arg}//.wav/.mp3}
Close, but you need to delay the expansion of your ${...} expression
until zargs executes the command. The way you wrote it, the parameter
substitution occurs before zargs is even run. Quotes are needed:
zargs --replace=arg -e.. -- *.wav .. eval \
ffmpeg -b 160k -i '"arg"' '${${file::="arg"}//.wav/.mp3}'
However, it's pretty hard to get the quoting perfect with that eval
in there.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author