Dwa sposoby na niepowodzenie z dowiązaniami symbolicznymi i powyższym kodem ... i nie znam rozwiązania.
Sposób nr 1
Uruchom to, aby utworzyć test:
echo test > testfile
mkdir dirtodelete
ln -s badlink dirtodelete/badlinktodelete
Tutaj widzisz swój plik testowy i katalog testowy:
$ ls testfile dirtodelete
testfile
dirtodelete:
linktodelete
Następnie uruchom commons-io deleteDirectory (). Awaria oznacza, że plik nie został znaleziony. Nie jestem pewien, co robią tutaj inne przykłady. Polecenie Linux rm po prostu usunę łącze, a także rm -r w katalogu.
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/dirtodelete/linktodelete
Sposób nr 2
Uruchom to, aby utworzyć test:
mkdir testdir
echo test > testdir/testfile
mkdir dirtodelete
ln -s ../testdir dirtodelete/dirlinktodelete
Tutaj widzisz swój plik testowy i katalog testowy:
$ ls dirtodelete testdir
dirtodelete:
dirlinktodelete
testdir:
testfile
Następnie uruchom commons-io deleteDirectory () lub przykładowy kod opublikowany przez osoby. Usuwa nie tylko katalog, ale także plik testowy znajdujący się poza katalogiem, który jest usuwany. (Ujawnia katalog domyślnie i usuwa zawartość). rm -r usunie tylko link. Musisz użyć czegoś takiego: usuń dereferencyjne pliki: "find -L dirtodelete -type f -exec rm {} \;".
$ ls dirtodelete testdir
ls: cannot access dirtodelete: No such file or directory
testdir: