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.
然后您可以使用结果列表来加密丢失的文件。
请注意此命令递归工作。
我正在尝试将一个目录中的文件与另一个目录中的文件进行比较。让我们以目录 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.
然后您可以使用结果列表来加密丢失的文件。
请注意此命令递归工作。