GNU находит с - исполнительная комната удаляет соответствия, затем жалуется, что они не существуют

У меня есть 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 но я не могу выяснить почему.

4
задан 09.01.2010, 18:13

4 ответа

Попытайтесь добавить -depth флаг, для обработки содержания каждого каталога до самого каталога.

РЕДАКТИРОВАНИЕ Аскером: Или, - сокращают флаг, поскольку я не забочусь о содержании вообще. Ваше предложение заставило меня думать об этом ищущий в каталогах после удаления их, которых я не рассмотрел и дал мне ответ конца, таким образом, я хотел сделать это корректным ответом, я на самом деле использовал.

3
ответ дан 07.12.2019, 20:28

Вы могли использовать -delete действие вместо -exec (как долго, поскольку у Вас есть недавняя находка).

1
ответ дан 07.12.2019, 20:28

Находка лучше всего сохраняется для того, когда необходимо рекурсивно вызвать каталоги, которые не похоже, что Вы делаете. В этом случае я просто сделал бы некоторое волшебство оболочки. Опции включают:

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
1
ответ дан 07.12.2019, 20:28

Попытайтесь использовать одинарные кавычки вместо двойных кавычек.

Оболочка разворачивает двойные кавычки прежде, чем передать их find, таким образом, это может быть rm'ing каталог перед файлами:

find /domains -name 0.2.v.theawesomesite.com 0.2.v.theawesomesite.com/file1 ...

Таким образом, это может обработать каталог сначала, затем искать файлы, которые это просто удалило.

0
ответ дан 07.12.2019, 20:28

Теги

Похожие вопросы