Due modi per fallire con i collegamenti simbolici e il codice sopra ... e non conosco la soluzione.
Modo n. 1
Esegui questo per creare un test:
echo test > testfile
mkdir dirtodelete
ln -s badlink dirtodelete/badlinktodelete
Qui puoi vedere il tuo file di test e la directory di test:
$ ls testfile dirtodelete
testfile
dirtodelete:
linktodelete
Quindi esegui commons-io deleteDirectory (). Si arresta in modo anomalo dicendo che il file non è stato trovato. Non sono sicuro di cosa facciano gli altri esempi qui. Il comando Linux rm eliminerebbe semplicemente il collegamento e anche rm -r nella directory.
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/dirtodelete/linktodelete
Modo n. 2
Esegui questo per creare un test:
mkdir testdir
echo test > testdir/testfile
mkdir dirtodelete
ln -s ../testdir dirtodelete/dirlinktodelete
Qui puoi vedere il tuo file di test e la directory di test:
$ ls dirtodelete testdir
dirtodelete:
dirlinktodelete
testdir:
testfile
Quindi esegui commons-io deleteDirectory () o il codice di esempio pubblicato dagli utenti. Elimina non solo la directory, ma il file di test che si trova all'esterno della directory da eliminare. (Dereferenzia implicitamente la directory ed elimina i contenuti). rm -r eliminerebbe solo il collegamento. È necessario utilizzare qualcosa del genere eliminare i file con riferimento: "find -L dirtodelete -type f -exec rm {} \;".
$ ls dirtodelete testdir
ls: cannot access dirtodelete: No such file or directory
testdir: