Estoy intentando find
eliminar archivos en el directorio y subdirectorios actuales (recursivamente) que coinciden con diferentes patrones e imprimo los archivos coincidentes para stdout
saber cuáles se eliminan.
Por ejemplo, quiero hacer coincidir todos los archivos que comienzan con '&' y todos los archivos que comienzan y terminan con '$'.
Intenté usar:
find . -type f -name '&*' -or -type f -name '$*$' -exec rm -v {} \;
pero rm
se aplica solo en el último partido ('$*$').
Así lo he intentado:
find . -type f -name '&*' -or -type f -name '$*$' -delete
Pero esto no sólo coincide con el último patrón, sino que no genera los archivos eliminados.
Sé que puedo hacerlo:
rm -v ``find -type f -name '&*' -or -type f -name '$*$'``
pero realmente me gustaría evitar este tipo de enfoque y hacerlo con find
mando.
¿Algun consejo?
Gracias de antemano.
Respuesta1
Tu problema es queejecutivosolo se aplica al segundo patrón, intente poner paréntesis alrededor de sus condiciones de búsqueda para solucionarlo:
find . \( -type f -name '&*' -or -type f -name '$*$' \) -exec rm -v {} \;
Lo que hay que tener en cuenta es que esto no es un error, sino una característica, por lo que puedes hacer algo como esto:
find -type f -name '&*' -exec mv '{}' ./backup ';' -or -type f -name '$*$' -exec rm -v '{}' ';'
si lo necesitas
Respuesta2
Aunquezepelínla respuesta es correcta, también encontré esta solución:
encontrar . -escriba f \( -name '&*' -o -name '$*$' \) -print -delete