Удалить все файлы из (иногда пустого каталога )

Исходный код Coreutils находится здесь:https://github.com/coreutils/coreutils/blob/master/src/uptime.c

Как видите, именно так, как решили напечатать авторы, пробел перед текущим временем, два пробела после безотказной работы, ни одного вокруг подключенных пользователей и два пробела перед средней нагрузкой:

fprintftime (stdout, _(" %H:%M:%S  "), tmn, 0, 0);

printf (_("up  %2d:%02d,  "), uphours, upmins);

printf (ngettext ("%lu user", "%lu users", select_plural (entries)),

printf (_(",  load average: %.2f"), avg[0]);

2
09.07.2020, 00:42
3 ответа
find www -mindepth 1 -maxdepth 1 -exec rm -r -- {} +

Если .gitkeepнаходится в каталоге www, вы можете сделать это:

find www -mindepth 1 -maxdepth 1 ! -name.gitkeep -exec rm -r -- {} +
0
18.03.2021, 23:21

С POSIXfind:

find www -path 'www/[!.]*' -prune -exec rm -r -- {} +

По замыслу find не завершается ошибкой, если аргумент не указан. См. пример 8 в спецификации , который поясняет это.

Значение опций:

  • -pathуказывает, что мы ищем только пути, которые начинаются с www/и не имеют точки сразу после (, поэтому он исключает скрытые файлы из списка удаления ).

  • -pruneпредотвращает попытки find спуститься в каталоги, (которые вы уже используете rm -r, что делает это ).

  • --в rm -r -- {} +позволяет обрабатывать найденные файлы, даже если они начинаются с дефиса.

4
18.03.2021, 23:21

Есть простой способ в чистый bash(только встроенный):

Даже если вы используете

set -e

чтобы остановить скрипт при ненулевой ошибке выхода, вы можете сделать:

shopt -s nullglob # don't treat * literally
shopt -u dotglob  # don't match.dotfiles

rm -rf  www/* 2>/dev/null || true
#             < hide err><       > 
#                      only if set -e
1
18.03.2021, 23:21

Теги

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