
Я пробовал несколько методов из SU, но мне не удалось сделать это: у меня есть папка (например: /var/www/tmp/), которая содержит несколько файлов и каталогов. Я хотел бы удалить все файлы и папки в этом каталоге, за исключением скрытых файлов, которые находятся в /var/www/tmp, как мне это сделать?
Спасибо!
правка: для ясности, я бы хотел использовать это в cronjob
решение1
find /var/www/tmp -mindepth 1 -maxdepth 1 ! -name ".*" -exec rm -r -- {} +
Найдет файлы на максимальной (и минимальной) глубине 1 (т.е. файлы непосредственно в указанном каталоге), что делаетнетначните с точки и выполните rm -r
с совпадениями в качестве аргументов.
Попробуйте сначала с простым эхо или чем-то подобным, чтобы не выстрелить себе в ногу, прежде чем вы точно поймете, как это работает для вас.
Это решает ваш вопрос о сохранении всех скрытых файлов. Ваша тема немного отличается, но команда find легко модифицируется, чтобы вместо этого просто игнорировать файлы с именем .gitignore
.
решение2
Если у вас не установлена опция shell dotglob
, cd /var/www/tmp; rm -rf *
будет делать то, что вы хотите