У меня есть a /domains
каталог, в котором у меня есть записи такой как
theawesomesite.com
0.2.v.theawesomesite.com
0.3.v.theawesomesite.com
И после тестирования 0.3, я установлю основной домен для искажения новой версии. Действительно хорошие работы. Теперь, я хочу смочь удалить все старые версии. Я попробовал это:
find /domains -name "*.v.theawesomesite.com" -not -name "0.3.v.*" -ignore_readdir_race -exec rm -fr {} \;
Старые доменные каталоги удалены, но для каждого из них find
жалуется No such file or directory
. Я добавил -ignore_readdir_race
под идеей это помогло бы, но это не имеет.
Любые идеи, как избавиться от этих жалоб и почему find
жалуется во-первых. Это должно быть stat
луг после -exec
но я не могу выяснить почему.
Попытайтесь добавить -depth
флаг, для обработки содержания каждого каталога до самого каталога.
РЕДАКТИРОВАНИЕ Аскером: Или, - сокращают флаг, поскольку я не забочусь о содержании вообще. Ваше предложение заставило меня думать об этом ищущий в каталогах после удаления их, которых я не рассмотрел и дал мне ответ конца, таким образом, я хотел сделать это корректным ответом, я на самом деле использовал.
Находка лучше всего сохраняется для того, когда необходимо рекурсивно вызвать каталоги, которые не похоже, что Вы делаете. В этом случае я просто сделал бы некоторое волшебство оболочки. Опции включают:
for dir in *.v.theawesomesite.com
[[ $dir == 0.3.v.theawesomesite.com ]] || rm -r $dir
done
Или:
echo *.v.theawesomesite.com | grep -v '^0.3.v.theawesomesite.com$' | xargs rm -r
Или даже:
mv 0.3.v.theawesomesite.com 0.3.v.theawesomesite.com.SAVED
rm -r *.v.theawesomesite.com
mv 0.3.v.theawesomesite.com.SAVED 0.3.v.theawesomesite.com
Попытайтесь использовать одинарные кавычки вместо двойных кавычек.
Оболочка разворачивает двойные кавычки прежде, чем передать их find
, таким образом, это может быть rm'ing каталог перед файлами:
find /domains -name 0.2.v.theawesomesite.com 0.2.v.theawesomesite.com/file1 ...
Таким образом, это может обработать каталог сначала, затем искать файлы, которые это просто удалило.