比较来自 2 个不同目录的相同类型的文件:bashrc 函数

Compare same type of files from 2 diferent directories : zshrc function

我很久以前发布了一个关于如何比较相同类型(扩展名)文件的问题 来自 2 个不同的目录:

bash shell 下,一切正常,但现在,我在 zsh shell 下,下面的功能不再工作了:

function diffm() {for file in ""/; do diff -q "$file" ""/"${file##*/}"; done ;}

我收到以下错误:

$ diffm dir1 *.f90 dir2
diff: camb.f90/bessels.f90: Not a directory

camb.f90bessels.f90在同一个目录下,很奇怪的错误。

我想这样使用它(比如在 bash shell 下):

$ diffm . *.f90 ../../dir2

如果有人能看到解决此问题的解决方法...

更新: 这里是此函数 bash shell 的工作版本:

function diffm() {
  # First dir
  dir1=""
  # Second dir
  dir2="${@: -1}"
  # Add slash if needed
  [[ "$dir1" != */ ]] && dir1=$dir1"/"
  [[ "$dir2" != */ ]] && dir2=$dir2"/"
  # Wildcard filenames
  files=( "$dir1"${@:2:$#-2} )
  # Compare the files
  for file in "${files[@]}"
    do
      diff -q "$file" "$dir2""${file##*/}"
    done;
  }

我正在寻找 zsh shell 的等效项:知道吗?

你应该重组参数的顺序:

function diffm() {
    local dir2="" dir1=""; shift 2
    for file; do 
        diff -q "$dir1/$file" "$dir2/$file"
    done 
}

diffm ../../dir2 . *.f90

zsh 版本:

#!/usr/bin/env zsh

function diffm() {
    setopt nullglob
    local dir1="" files="" dir2="" file1 file2
    for file1 in "$dir1"/${~files}; do
        file2="${file1##*/}"
        diff -q "$file1" "$dir2/$file2"
    done
}

diffm dir1 "*.f90" dir2