Я взломал этот скрипт вместе с rsync
некоторыми файлами ssh
. --remove-source-files
Вариант , rsync
кажется , удалить файлы , он передает, что это то , что я хочу. Тем не менее, я также хочу, чтобы каталоги, в которые помещены эти файлы, также исчезли.
Текущая часть find
команды -exec rmdir -p {} ;
пытается удалить родительский каталог (в данном случае /srv/torrents
), но завершается неудачно, потому что у нее нет необходимых разрешений. То, что я хотел бы сделать, это прекратить обходить rmdir
каталог, find
в котором запущен каталог , или найти другое решение, чтобы избавиться от всех пустых папок. Я думал об использовании какой-то петли find
и работал rmdir
без -p
выключателя, но я думал, что это не сработает.
По сути, есть ли альтернативный способ удалить все пустые каталоги в родительском каталоге?
#!/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 \{\} \;
источник
./foo/bar/baz/
все пустые папки, он не удалит их.) Мне нужно что-то, что попадет в каталоги ниже текущего уровня, поэтому я и использую находить.-mindepth 1
параметр, чтобы не удалять родительский каталог.mkdir test; cd test; mkdir sub; find -type d -empty -print -delete; cd ..; ls -ld test; ls -lR test
, Все еще там ("суб" ушел). Директория «test» не пуста до тех пор, пока ее содержимое не будет удалено (сначала в глубину). Теперь сделайтеcd test; find -type d -empty -print -delete; cd ..; ls -ld test; ls -lR test
(перезапустите его, когда «тест» уже пуст). Все еще там.find
запуска (find $DIR -mindepth 1 -type d -empty -delete
) ... кто знает? Кажется, это работает для меня, и это главное! :)Вы также можете сделать
источник