В моем случае rmdir -f *
не работал, и мне пришлось искать другое решение.
У меня была такая ситуация:
зеркалирование с помощью этой команды в моем скрипте:
lftp -u ${FTPUSER},${FTPPASS} ${FTPHOST} -e "mirror --depth-first --no-empty-dirs --Remove-source-files --verbose . ${MYLOCALFOLDER} ; bye" >> $LOG 2>&1
но это оставило пустое дерево каталогов, как это на удаленном:
|-- 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
поэтому я добавил это в свой скрипт:
# 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
Если вы хотите проверить и посмотреть, что на самом деле делает команда bash 'for', вы можете добавить 'echo' перед командой lftp, чтобы она выводила ее вместо того, чтобы фактически делать это:
for i in $(cat /tmp/emptydirlist.txt); do echo lftp -u ${FTPUSER},${FTPPASS} ${FTPHOST} -e "rmdir -f $i; bye"; done
Недостатком этого подхода является то, что он откроет много сеансов ftp, фактически один сеанс для каждого каталога, который нужно удалить ... что, вероятно, не лучший способ, но ... в любом случае это лучший способ, который я нашел до сих пор :)