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