4

У меня есть каталог /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 ответа4

3

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

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

1

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

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

Вы можете использовать действие -delete вместо -exec (если вы недавно нашли).

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .