bash 用于比较一个目录中的文件名与另一个目录中的文件名同时忽略文件扩展名的脚本

bash script to compare file names in one directory with file names in another while ignoring file extensions

我正在尝试将一个目录中的文件与另一个目录中的文件进行比较。让我们以目录 test 1 和 test2 为例。如果测试 1 包含一个名为 123.JPG 的文件,如果测试 2 包含一个名为 123.JPG.gpg 的文件,那么我将不采取任何行动:123.JPG 已经被加密。但是,如果没有匹配成功,我将 运行 gpg 加密 123.JPG.

我在其他地方找到了这个脚本,我试图修改它来实现上述但无济于事:

cd source
for x in *; do
  set -- "…/dest/${x%.*}".*
  if [ $# -eq 1 ] && ! [ -e "" ]; then
    echo "$x has not been converted"
  elif [ $# -gt 1 ]; then
    echo "$x has been converted to more than one output file: " "$@"
  else
    echo "$x has been converted to "
  fi
done

有人可以帮忙吗?

谢谢

所以,对于test1目录下的每个文件X,你要检查X.gpg目录下是否存在名为X.gpg的文件,如果不存在,则执行GPG在 test2.

中创建文件的命令
for source in test1/*
do
    target="test2/$(basename "$source").gpg"
    if [ ! -f "$target" ]
    then
        …run gpg to encrypt "$source" into "$target"…
    fi
done

如果你有 GNU 的 find 并且你可以使用 printf 选项,那么下面的命令:

comm -23 <(find A -type f -printf '%f.gpg\n'|sort) <(find B -type f -printf '%f\n'|sort)

将为您提供丢失文件列表:

如果目录A是:

A
├── 123.JPG
├── 456.JPG
└── 789.JPG

而目录 B 是:

B
├── 123.JPG.gpg
└── 456.JPG.gpg

输出将是 789.JPG.gpg,这是丢失的加密文件 - 它 在目录 B 中不存在 ,并且文件具有相似的名称但没有扩展名, 确实存在在目录A.

然后您可以使用结果列表来加密丢失的文件。

请注意此命令递归工作。