1 votes

Comm la commande de sortie en bash par rapport à zsh

En train de passer de bash à zsh. Je compare le contenu de deux dossiers et affiche les fichiers communs :

common_files=$(comm -12 <(ls -p "$folder1") <(ls -p "$folder2"))
  for f in ${common_files[@]}; do
  echo "pass:"
  echo "$f"
done

Sur bash, j'obtiens un tableau avec des entrées séparées :

pass:
file1
pass:
file2
pass:
file3

la sortie sur zsh montre que tous les éléments sont "conflés" en une seule entrée de tableau :

pass:
file1
file2
file3

Comment puis-je obtenir le même comportement dans zsh qu'à l'origine ? Merci.

1voto

Marlon Richert Points 1441

Voici comment le faire correctement en Zsh, avec des tableaux :

common-files() {
  file-names $1 && local -a files_a=( $reply )
  file-names $2 && local -a files_b=( $reply )

  # `:*`: Conserver uniquement les éléments communs aux deux.
  # `(F)`: Joindre les éléments avec des sauts de ligne.
  print ${(F)files_a:*files_b}
}

file-names() {
  # `.`: Correspondre uniquement aux fichiers (pas aux répertoires).
  # `D`: Inclure les fichiers cachés.
  local -a paths=( $1/*(#q.D) )

  # `:t`: Conserver uniquement le nom ("queue") de chaque fichier, pas son chemin complet.
  reply=( $paths:t )
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X