GNU/Linux >> Tutoriels Linux >  >> Linux

Obtenir tous les fichiers sauf les fichiers du tableau - Bash ?

Je dois écrire un utilitaire unique qui effectue une opération sur tous les fichiers d'un répertoire donné, mais une liste de fichiers dans une liste prédéfinie. Étant donné que la liste donnée est prédéfinie, je vais la coder en dur sous forme de tableau.

Cela dit, comment obtenir les noms de tous les fichiers qui ne sont pas dans le tableau donné ? Cela peut être dans n'importe quel script Unix standard (bash, awk, perl).

Réponse acceptée :

Avec bash , vous pourriez faire :

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[@]}"

(qui fonctionne ici pour les fichiers du répertoire courant, mais pas de manière fiable pour les globs comme all=(*/*) except=(foo/bar) comme nous utilisons / pour joindre les éléments du tableau pour la recherche).

Il est basé sur le fait que "${array[*]}" joint les éléments du tableau avec le premier caractère de $IFS (ici choisi pour être / car cela ne peut pas se produire autrement dans un fichier nom; NUL est un caractère qui ne peut pas apparaître dans un fichier chemin , mais malheureusement bash (contrairement à zsh ) ne peut pas avoir un tel caractère dans ses variables). Donc, pour chaque fichier dans $all (ici avec $file être foo par exemple), on fait un case "/file1/file2/notme.txt/" in (*"/foo/"*) pour vérifier si $file est à exclure.


Linux
  1. Obtenir la liste de tous les fichiers par masque dans le terminal ?

  2. Comment obtenir le Tty dans lequel Bash est en cours d'exécution ?

  3. Le tutoriel Ultimate Bash Array avec 15 exemples

  4. Comment trouver tous les fichiers épars sous Linux

  5. Script bash pour supprimer tous les fichiers sauf N lorsqu'ils sont triés par ordre alphabétique

Tableaux bash

Tableau associatif dans Bash

Supprimer le référentiel Git, mais conserver tous les fichiers

Supprimez tous les fichiers sauf les 3 plus récents dans le script bash

Comment obtenir la taille réelle du répertoire (hors du) ?

Supprimer tous les fichiers aléatoires sauf 1000 dans un répertoire