No meu caso rmdir -f *
não funcionou e eu tive que encontrar outra solução.
Eu tive essa situação:
espelhamento com este comando no meu script:
lftp -u ${FTPUSER},${FTPPASS} ${FTPHOST} -e "mirror --depth-first --no-empty-dirs --Remove-source-files --verbose . ${MYLOCALFOLDER} ; bye" >> $LOG 2>&1
mas isso deixou uma árvore vazia de diretórios como este no remoto:
|-- 693
| '-- 2014-01-06
|-- 75
| |-- 2014-01-10
| |-- 2014-01-11
| |-- 2014-01-12
| |-- 2014-01-13
| |-- 2014-01-14
| |-- 2014-01-15
| '-- 2014-01-16
|-- 811
| |-- 2014-01-07
| |-- 2014-01-08
| |-- 2014-01-09
| |-- 2014-01-10
| |-- 2014-01-11
| |-- 2014-01-12
| |-- 2014-01-13
| |-- 2014-01-14
| |-- 2014-01-15
| '-- 2014-01-16
então adicionei isso ao meu script:
# create a local mirror with the empty dir structure
mkdir /tmp/lftp_emptydirlist
cd /tmp/lftp_emptydirlist
lftp -u ${FTPUSER},${FTPPASS} ${FTPHOST} -e "mirror ;bye"
# sort -r is to reverse and leave the empty parent dirs at the end.
# egrep will strip the "." directory from the list
find|sort -r|egrep -v '^.$' > /tmp/emptydirlist.txt
# remove remote empty directories
for i in $(cat /tmp/emptydirlist.txt) do
lftp -u ${FTPUSER},${FTPPASS} ${FTPHOST} -e "rmdir -f $i; bye"
done
# remove local empty directories
find ${MYLOCALFOLDER} -type d -empty -delete
Se você quiser testar e ver o que o comando bash 'for' está realmente fazendo, você pode adicionar um 'eco' antes do comando lftp, então ele irá imprimi-lo em vez de fazê-lo:
for i in $(cat /tmp/emptydirlist.txt); do echo lftp -u ${FTPUSER},${FTPPASS} ${FTPHOST} -e "rmdir -f $i; bye"; done
O lado negativo dessa abordagem é que ela abrirá muitas sessões ftp, na verdade uma sessão para cada diretório a ser removido ... o que provavelmente não é o melhor caminho, mas ... é a melhor maneira que encontrei até agora: )