30/09/2018, 16:32 
               
            Sao dùng rsync -a --delete lại xóa directory nhanh vậy nhỉ?
Mới google ra thấy cái mẹo này để empty một directory rất nhanh. Nhưng mình không hiểu sao nó lại nhanh đến thế.
mkdir empty_dir
rsync -a --delete empty_dir/    yourdirectory/
Nguồn: http://unix.stackexchange.com/questions/37329/efficiently-delete-large-directory-containing-thousands-of-files
Update: Nhanh hơn so với rm -rf dir trong trường hợp dir có nhiều file nhỏ
            Bài liên quan
         
               
            




Nhanh so với cái gì vậy Đạt?
Nếu Đạt dùng GNU find, thử:
Hoặc:
Nhanh so với
rm -rftrong trường hợp director muốn xóa có nhiều file nhỏHình như cái này cũng nhanh, thấy trong link ở Post 1 cũng có nói về
find -deletemà Đạt chưa thử.rm -rfhayrsync --deleteđều gọiunlink()system call với mỗi file. Khi directory có nhiều files,rmsẽ chậm hơn vì nó phải tự build directory tree để xử lý file (thường là btree).rsyncthì chỉ quân tâm đến directory tree ở source, duplicate sang destination.Vậy lý do là rm phải build
directory tree, mà sao phải build nhỉ, gặp cái nào thì bụp cái đó thôi.Nếu vậy nó cũng phải
unlinkdestination file chứ?Nếu cứ gặp thằng nào bụp thằng đó, nhỡ cứ bụp xong lại có thằng tạo ra, hay có thằng nào đó tương kế tựu kế làm cái symlink sang directory khác thì…toi. Nếu Đạt dùng
straceĐạt sẽ thấy mỗi lân remove một file xong thìrmsẽ lại dùng syscallnewfstatat.Cả
rsyncvàrmđều phảiunlinktất cả các file trong thư mục, nhưngrsynckhông phải build directory tree nhưrm, nó chỉ việc dùng syscall và bắt kernel làm điều này.Nếu Đạt để ý thì thấy cả
rmvàrsyncđều remove files theo dạngDepth First Search, nếu có file A và C, directory B thì A sẽ bị remove trước, rồi B và tất cả các con của nó, rồi mới đến C.