Итак, если я правильно понял, вы хотите найти, например, / home / demo / foo / cache
для всех значений foo
. Поскольку вам не нужно заглядывать в более глубокие уровни, это довольно просто.
(1) Вы можете перечислить их с помощью команды оболочки:
$ cd /home/demo
$ echo */cache
Чтобы защититься от забавных имен, например, начинающихся с тире ( -foo
), лучше использовать ./ *
. Кроме того, в bash вы также можете включить в глобус имена, начинающиеся с точки, используя shopt -s dotglob
.
(2) Найдите и удалите файлы внутри каталогов (с помощью GNU find -mindepth 1
предотвращает совпадение с самими каталогами):
$ shopt -s dotglob
$ find ./*/cache -mindepth 1 # list them
./awda2/cache/foo
[...]
$ find ./*/cache -mindepth 1 -delete # delete them...
Вы также можете использовать только rm
, но с огромным количеством файлов вы можете выйти за пределы допустимой длины командной строки.
$ rm -r ./*/cache/*
(3) Создайте или скопируйте файл для всех из них ( touch
создает пустой файл):
$ for dir in ./*/cache ; do touch "$dir/index.html" ; done
$ for dir in ./*/cache ; do cp index.html.model "$dir/index.html" ; done
(Если есть файл (не каталог) с именем cache
, вы получите безобидную ошибку.)
Используйте GNU tar в macosx. Он основан на том же источнике. http://macappstore.org/gnu-tar/