Skasowałem ten skrypt do rsync
niektóre pliki się skończyły ssh
. The --remove-source-files
opcja rsync
zdaje się usuwać przesyłane pliki, czego chcę. Jednak chcę również, aby katalogi, w których te pliki zostały umieszczone, również zniknęły.
Aktualna część find
dowództwo, -exec rmdir -p {} ;
próbuje usunąć katalog nadrzędny (w tym przypadku /srv/torrents
), ale nie działa, ponieważ nie ma odpowiednich uprawnień. Chciałbym tylko przestać rmdir
od przechodzenia nad katalogiem find
jest uruchamiany lub znajdź inne rozwiązanie, aby pozbyć się wszystkich pustych folderów. Myślałem o użyciu jakiejś pętli find
i działa rmdir
bez -p
przełącznik, ale myślałem, że to nie zadziała.
Głównie, czy istnieje alternatywny sposób usunięcia wszystkich pustych katalogów w katalogu nadrzędnym?
#!/bin/bash
HOST='<hostname>'
USER='<username>'
DIR='<destination directory>'
SOURCE='/srv/torrents/'
rsync -e "ssh -l $USER" --remove-source-files -h -4 -r --stats -m --progress -i $SOURCE $HOST:$DIR
find $SOURCE -mindepth 1 -type d -empty -prune -exec rmdir -p \{\} \;
źródło
./foo/bar/baz/
wszystkie są pustymi folderami, nie usuwają ich.) Potrzebuję czegoś, co dostanie się do katalogów poniżej obecnego poziomu, dlatego używam find.-mindepth 1
parametr, więc nie usuwa katalogu nadrzędnego.mkdir test; cd test; mkdir sub; find -type d -empty -print -delete; cd ..; ls -ld test; ls -lR test
. Nadal tam („sub” już nie ma). Katalog „test” nie jest pusty, dopóki jego zawartość nie zostanie usunięta (głębokość). Teraz zróbcd test; find -type d -empty -print -delete; cd ..; ls -ld test; ls -lR test
(uruchom ponownie, gdy „test” jest już pusty). Wciąż tam.find
biegać dalej (find $DIR -mindepth 1 -type d -empty -delete
)... kto wie? Wydaje się, że to działa dla mnie i to się liczy! :)możesz także zrobić
źródło