Use -execdir em vez de -exec ;
find . -type f -name "*.7z" -execdir 7za x {} \; -exec rm -- {} \;
-execdir é executado no diretório que contém o arquivo. De man find :
-execdir command {} +
Like -exec, but the specified command is run from the
subdirectory containing the matched file, which is not normally
the directory in which you started find.
Outros comentários:
Use -quit no while do find , para que find não continue pesquisando depois que uma correspondência foi encontrada (consulte link ):
while [ -n "$(find . -type f -name '*.7z' -print -quit)" ]
do
find . -type f -name "*.7z" -execdir 7za x {} \; -exec rm -- {} \;
done