我试图将一个目录中的文件与另一个目录中的文件进行比较。让我们进行目录测试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 "$1" ]; 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 $1"
fi
done
有人可以帮忙吗?
谢谢
答案 0 :(得分:1)
因此,对于test1
目录中的每个文件X,您要检查X.gpg
目录中是否存在名为test2
的文件,如果不存在,则执行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
答案 1 :(得分:0)
如果你有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中存在。
然后,您可以使用结果列表加密丢失的文件。
请注意,此命令以递归方式工作。