Назад | Перейти на главную страницу

рекурсивный grep / list bash

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. Вы можете поместить результат этого в переменную в вашем скрипте и делать с ним все, что хотите.