grep/lista bash recursivo

grep/lista bash recursivo
parts = grep "/root/backups/*"

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

Básicamente necesito recorrer una carpeta y devolver cada elemento de la carpeta usando un script Bash.

No se puede empezar a trabajar mediante grep, aunque puede ser una forma mucho más sencilla. La primera línea es pseudocódigo puro sin pistas.

Respuesta1

Esto se puede hacer fácilmente sin bucles.

Si sólo desea deshacerse de los archivos, utilice rm:

$ rm -rf /root/backups/*

Si desea mostrar los nombres de los archivos a medida que los elimina, utilice buscar en su lugar:

$ find /root/backups -maxdepth 1 -mindepth 1 -print -exec rm -rf {} \;

La opción -max Depth le indica a Find que no descienda más de un nivel desde el punto de partida, /root/backups. La opción -min Depth le indica a Find dónde comenzar a devolver resultados, lo que efectivamente le dice a Find que ignore el punto de partida. La opción -print simplemente imprime los archivos encontrados en la pantalla. Con -exec, los {} se reemplazan con los archivos encontrados, por lo que esto llama a rm para eliminarlos.

EDITAR: eliminó un -exec innecesario por comentario

Respuesta2

Cambie el comando grep a:

para i en ``ls -bRC1 /path/* ; hacer eco $i ; habitación $i ; hecho

El -b escapará de espacios y otros caracteres que pueden provocar errores y consecuencias no deseadas con rm. -R es recursivo. -C1 es una sola columna (que puede ser redundante). Yo reconsideraría el -rf

Es posible que desee utilizar buscar en lugar de un bucle for

find /path -H -maxdepth 3 -type f -mtime +7 -exec rm {} \; -ls

Si no sabe qué significan las opciones anteriores, escriba man find.

Respuesta3

grep -l te dará solo los nombres de los archivos

partes = grep -rl ....

Respuesta4

Quiere una lista de nombres de archivos en un directorio determinado. Hay un programa que hace esto y te dará vergüenza leer su nombre: ls. ¡Eso es todo lo que hace! Quiere un listado recursivo que incluya archivos en subdirectorios, así que utilice ls -R. Puedes poner el resultado de eso en una variable en tu script y hacer lo que quieras con él.

información relacionada