Symlinks ve yukarıdaki kodla başarısız olmanın iki yolu ... ve çözümü bilmiyorum.
Yol # 1
Bir test oluşturmak için bunu çalıştırın:
echo test > testfile
mkdir dirtodelete
ln -s badlink dirtodelete/badlinktodelete
Test dosyanızı ve test dizininizi burada görebilirsiniz:
$ ls testfile dirtodelete
testfile
dirtodelete:
linktodelete
Sonra commons-io deleteDirectory () komutunu çalıştırın. Dosyanın bulunmadığını söyleyerek çöküyor. Diğer örneklerin burada ne yaptığından emin değilim. Linux rm komutu basitçe bağlantıyı siler ve dizindeki rm -r de olur.
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/dirtodelete/linktodelete
Yol # 2
Bir test oluşturmak için bunu çalıştırın:
mkdir testdir
echo test > testdir/testfile
mkdir dirtodelete
ln -s ../testdir dirtodelete/dirlinktodelete
Test dosyanızı ve test dizininizi burada görebilirsiniz:
$ ls dirtodelete testdir
dirtodelete:
dirlinktodelete
testdir:
testfile
Ardından, commons-io deleteDirectory () öğenizi veya kişilerin yayınladığı örnek kodu çalıştırın. Yalnızca dizini değil, silinmekte olan dizinin dışındaki sınama dosyanızı da siler. (Dizini dolaylı olarak dereferences ve içeriği siler). rm -r yalnızca bağlantıyı siler. Bunun gibi bir şey kullanmanız gerekir, referansı silinmiş dosyaları silin: "find -L dirtodelete -type f -exec rm {} \;".
$ ls dirtodelete testdir
ls: cannot access dirtodelete: No such file or directory
testdir: