parts = grep "/root/backups/*"
for part in $parts
do
echo $part
rm -rf $part #delete
done
Мне в основном нужно перебирать папку и возвращать каждый элемент в папке с помощью сценария Bash.
Невозможно начать работу через grep, хотя это может быть более простой способ. Первая строка - это чистый псевдокод без подсказки.
Это легко сделать без зацикливания.
Если вы просто хотите избавиться от файлов, просто используйте rm:
$ rm -rf /root/backups/*
Если вы хотите, чтобы имена файлов отображались при их удалении, используйте вместо этого команду find:
$ find /root/backups -maxdepth 1 -mindepth 1 -print -exec rm -rf {} \;
Параметр -maxdepth указывает find не спускаться дальше одного уровня от начальной точки / root / backups. Параметр -mindepth сообщает find, с чего начать возвращать результаты, эффективно говоря find игнорировать начальную точку. Параметр -print просто выводит найденные файлы на экран. При использовании -exec {} заменяются найденными файлами, поэтому для их удаления вызывается команда rm.
РЕДАКТИРОВАТЬ: исключен ненужный -exec для каждого комментария
Измените команду grep на:
для i в `` ls -bRC1 / path / *
; сделать echo $ i; rm $ i; сделано
-B будет экранировать пробелы и другие символы, которые могут привести к ошибкам и непредвиденным последствиям с rm. -R рекурсивен. -C1 - один столбец (который может быть избыточным). Я бы пересмотрел -rf
Вы можете использовать find вместо цикла for
find /path -H -maxdepth 3 -type f -mtime +7 -exec rm {} \; -ls
Если вы не знаете, что означают указанные выше параметры, введите man find
.
grep -l даст вам только имена файлов
parts = grep -rl ....
Вам нужен список имен файлов в данном каталоге. Есть программа, которая делает это, и вам будет неловко читать ее название: ls
. Вот и все! Вам нужен рекурсивный список, включающий файлы в подкаталогах, поэтому используйте ls -R
. Вы можете поместить результат этого в переменную в вашем скрипте и делать с ним все, что хотите.