Если вы хотите скрыть весь вывод, вы можете перенаправить стандартный ввод и стандартный вывод:
find / -iregex ".*cpuinfo.*" >/dev/null 2>&1 &
Или с башом:
find / -iregex ".*cpuinfo.*" &>/dev/null &
GNUly, это может быть:
LC_ALL=C find. -name '*.svg' -type f -printf '%h\0' |
LC_ALL=C sort -zu |
xargs -r0 echo rm -rf
Где find
сообщает имя каталога всех.svg
обычных файлов, sort -zu
удаляет дубликаты, а xargs rm
удаляет их.
Это не очень эффективно, поскольку продолжает искать .svg
файлы в дочерних элементах заданного каталога даже после того, как в нем был найден .svg
файл.
Обратите внимание, что если текущий каталог содержит .svg
файлы, rm
откажется удалять его (в качестве меры предосторожности rm -rf.
для устранения неправильной функции в некоторых оболочках, где rm -rf.*
включает .
и ..
в расширении.*
).
Это можно обойти, заменив .
на "$PWD"
выше.
Удалите echo
, когда будете уверены, что он будет делать то, что вы хотите.
С оболочкойbosh
вы могли бы сделать это более эффективно с помощью встроеннойfind
:
has_svg() {
find "$@" -maxdepth 1 -name '*.svg' -type f -call return 0 \;
return 1
}
find. -type d -call 'has_svg "$1"' {} \; -prune -exec echo rm -rf {} +
Используя GNU find, мы используем find внутри find, чтобы сначала просмотреть каталог, начиная с нижних уровней, а затем проверить, содержит ли этот каталог хотя бы один файл.svg. Мы удаляем такие каталоги.
$ find. -depth ! -name. -type d \
-exec sh -c '
N=$#
for d do
test "x$(find "$d/." -maxdepth 1 -type f -name "*.svg" -print -quit)" != "x" &&
set -- "$@" "$d"
done
shift "$N"; rm -rf ${1+"$@"}
' find-sh {} +