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

grep/list bash рекурсивный
parts = grep "/root/backups/*"

for part in $parts
do
    echo $part
    rm -rf $part #delete
done

По сути, мне нужно пройтись по папке и вернуть каждый элемент в папке с помощью скрипта Bash.

Невозможно заставить работать через grep, хотя это может быть гораздо более простым способом. Первая строка - чистый псевдо-no-clue-код.

решение1

Это можно легко сделать без зацикливания.

Если вы просто хотите избавиться от файлов, просто используйте 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 для их удаления.

EDIT: удален ненужный -exec в каждом комментарии

решение2

Измените команду 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.

решение3

grep -l выдаст вам только имена файлов

части = grep -rl ....

решение4

Вам нужен список имен файлов в указанном каталоге. Есть программа, которая это делает, и вам будет стыдно прочитать ее имя: ls. Это все, что она делает! Вам нужен рекурсивный список, включающий файлы в подкаталогах, поэтому используйте ls -R. Вы можете поместить вывод этого в переменную в вашем скрипте и делать с ним все, что захотите.

Связанный контент