Você provavelmente precisará escapar do til na expansão da chave, caso contrário, ele será expandido para o seu diretório inicial.
Por que você não canaliza o find
para seu loop while
em vez de criar variáveis para mantê-los? Dentro do seu loop, basta fazer rm -i "$file"
.
#!/bin/sh -x
set -o errexit
unalias -a
exec 3<&0 # open a duplicate of stdin
flag=false
find . -name "*~" | while IFS=$'\n' read -r file
do
if [ ! -e "${file%\~}" ]
then
orphans="$file"$'\n'"$orphans"
# use an alternate file descriptor so read and rm -i get along
rm -i "$file" <&3
flag=true
fi
done
exec 3<&- # close the file descriptor
if ! $flag
then
echo "No orphans."
else
echo "orphans:\n$orphans"
fi
Se você quiser usar o Bash, você precisa mover o find
para o final do loop para que não seja criado um subshell.
#!/bin/bash
...
# use an alternate file descriptor so read and rm -i get along
while read -u 3 -r ...
rm -i ...
...
done 3< <(find ...)
...