Я пытаюсь использовать --delete
опцию в, rsync
чтобы удалить файлы в целевом каталоге, которого нет в исходном каталоге
Вот команда, которую я использую:
rsync -avz --ignore-existing --recursive --delete /var/www/* root@mydomaintest.com:/var/www
Итак, мой вопрос, как я могу удалить все файлы в целевой директории, которых нет в исходной директории?
--recursive
переизбыток, потому что вариант-a
уже включает егоВаша команда не работала, потому что, когда вы использовали
/var/www/*
в качестве источника, ваша оболочка выполняет глобализацию, т.е. оболочка расширяется*
на все файлы в этом каталоге и копирует файлы по одному, поэтому здесь отдельные файлы стали источниками, а не родительский каталог.Таким образом, если вы используете
/var/www/*
, то вам не нужен--recursive
параметр, поскольку*
это приведет к копированию файлов (вместе с любыми каталогами с их содержимым), а не к родительскому каталогу, в котором находятся файлы. По той же причине--delete
не работает, так как--delete
удалит файлы из целевого каталога , которые не находятся в исходном каталоге , но вы копируете файлы, поэтому он не удаляет файлы (как ожидается).Это сделает вас более понятным:
Как вы можете видеть, я использовал источник, так как
/foo/*
выполняемаяrsync
командас
*
созданием оболочки для его расширения и создания всех файлов по отдельности в качестве исходных аргументов, а не родительского каталога в целом (и--recursive
в этом случае вам также не нужен )Итак, если вы хотите сделать
--delete
работу, запустите ее как:источник