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