Você deve conseguir fazer isso em uma única linha, com algo assim:
find . -name '*.mp3' -execdir id3v2 --remove-frame "COMM" '{}' \; -execdir id3v2 --remove-frame "PRIV" '{}' \; -execdir id3v2 -s '{}' \;
Os {} são substituídos pela correspondência de nome de arquivo atual. Colocá-los entre aspas ( ''
) protege-os do shell. O -execdir
é executado até atingir um ponto e vírgula, mas o ponto e vírgula ( ;
) precisa escapar do shell, portanto, o uso da barra invertida ( \
). Tudo isso está descrito na manpage do find
:
-exec command ;
Execute command; true if 0 status is returned. All following
arguments to find are taken to be arguments to the command until
an argument consisting of ';' is encountered. The string '{}'
is replaced by the current file name being processed everywhere
it occurs in the arguments to the command, not just in arguments
where it is alone, as in some versions of find.
-execdir command {} +
Like -exec, but the specified command is run from the subdirec‐
tory containing the matched file, which is not normally the
directory in which you started find. This a much more secure
method for invoking commands...
Desde que você soa como um pouco novo para isso, uma ressalva : Como sempre com comandos shell complexos, corra-os com cuidado, e tente em um diretório de testes primeiro, para ter certeza que você entendeu o que vai acontecer. Com grande poder vem uma grande responsabilidade!