GNU/Linux >> Tutoriales Linux >  >> Linux

Obtener todos los archivos excepto los archivos en matriz:¿Bash?

Debo escribir una utilidad única que realice alguna operación en todos los archivos en un directorio determinado, pero una lista de archivos en una lista predefinida. Dado que la lista dada está predefinida, la codificaré como una matriz.

Habiendo dicho eso, ¿cómo obtener los nombres de todos los archivos que no están en la matriz dada? Esto puede estar en cualquier secuencia de comandos unix estándar (bash, awk, perl).

Respuesta aceptada:

Con bash , podrías hacer:

all=(*)
except=(file1 file2 notme.txt)
only=()
IFS=/
for file in "${all[@]}"; do
  case "/${except[*]}/" in
    (*"/$file/"*) ;;     # do nothing (exclude)
    (*) only+=("$file")  # add to the array
  esac
done
ls -ld -- "${only[@]}"

(que funciona aquí para los archivos en el directorio actual, pero no de forma fiable para globs como all=(*/*) except=(foo/bar) como usamos / para unir los elementos de la matriz para la búsqueda).

Se basa en el hecho de que "${array[*]}" une los elementos de la matriz con el primer carácter de $IFS (aquí elegido para ser / ya que de otra manera no puede ocurrir en un archivo nombre; NUL es un carácter que no puede aparecer en un archivo ruta , pero desafortunadamente bash (al contrario de zsh ) no puede tener tal carácter en sus variables). Entonces, para cada archivo en $all (aquí con $file siendo foo como ejemplo), hacemos un case "/file1/file2/notme.txt/" in (*"/foo/"*) para verificar si $file debe ser excluido.


Linux
  1. ¿Cómo obtener el Tty en el que se está ejecutando Bash?

  2. El último tutorial de Bash Array con 15 ejemplos

  3. Bash script para eliminar todos los archivos excepto N cuando se ordenan alfabéticamente

  4. Cómo obtener todos los archivos que excedan cierto tamaño y eliminarlos

  5. ¿Cómo puedo obtener valores únicos de una matriz en Bash?

Arreglos bash

Matriz asociativa en Bash

Eliminar el repositorio de Git, pero conservar todos los archivos

Elimine todos los archivos excepto los 3 más nuevos en bash script

¿Cómo obtener el tamaño real del directorio (fuera de du)?

Eliminar todos menos 1000 archivos aleatorios en un directorio