Dos formas de fallar con los enlaces simbólicos y el código anterior ... y no conozco la solución.
Camino # 1
Ejecute esto para crear una prueba:
echo test > testfile
mkdir dirtodelete
ln -s badlink dirtodelete/badlinktodelete
Aquí puede ver su archivo de prueba y el directorio de prueba:
$ ls testfile dirtodelete
testfile
dirtodelete:
linktodelete
Luego ejecute su commons-io deleteDirectory (). Se bloquea al decir que no se encuentra el archivo. No estoy seguro de lo que hacen los otros ejemplos aquí. El comando rm de Linux simplemente eliminaría el enlace, y rm -r en el directorio también lo haría.
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/dirtodelete/linktodelete
Camino # 2
Ejecute esto para crear una prueba:
mkdir testdir
echo test > testdir/testfile
mkdir dirtodelete
ln -s ../testdir dirtodelete/dirlinktodelete
Aquí puede ver su archivo de prueba y el directorio de prueba:
$ ls dirtodelete testdir
dirtodelete:
dirlinktodelete
testdir:
testfile
Luego ejecute su commons-io deleteDirectory () o el código de ejemplo que publicaron las personas. No solo elimina el directorio, sino también el archivo de prueba que está fuera del directorio que se está eliminando. (Elimina la referencia del directorio implícitamente y elimina los contenidos). rm -r eliminaría solo el enlace. Debe usar algo como esto, elimine los archivos desreferenciados: "find -L dirtodelete -type f -exec rm {} \;".
$ ls dirtodelete testdir
ls: cannot access dirtodelete: No such file or directory
testdir: