Linux 按前缀查找重复文件(不是哈希)
如果我有两个文件,其中一个是:Linux 按前缀查找重复文件(不是哈希),linux,Linux,如果我有两个文件,其中一个是: 2020-07-03-21_56_51-a.jpg 另一个: 2020-07-03-21_56_51-b.jpg 这些都是相同的文件,例如fdupes。不承认它们是重复的 如何匹配timedate格式并将其打印为可能的副本?您可以迭代a文件并搜索相应的b文件: #! /bin/bash for filea in ????-??-??-??_??_??-a.jpg ; do fileb=${filea%-a.jpg}-b.jpg if [[ -f
2020-07-03-21_56_51-a.jpg
另一个:
2020-07-03-21_56_51-b.jpg
这些都是相同的文件,例如fdupes。不承认它们是重复的
如何匹配timedate格式并将其打印为可能的副本?您可以迭代a文件并搜索相应的b文件:
#! /bin/bash
for filea in ????-??-??-??_??_??-a.jpg ; do
fileb=${filea%-a.jpg}-b.jpg
if [[ -f $fileb ]] ; then
echo Found "$filea" "$fileb"
else
echo Not found the b file for "$filea"
fi
done
您还可以使用comm处理a文件和b文件列表。b文件更改为类似于a文件,因此comm将以三列报告输出:1。找不到b文件,2。找不到a文件,3。两个文件都存在
comm <(ls ????-??-??-??_??_??-a.jpg) \
<(ls ????-??-??-??_??_??-b.jpg | sed 's/-b\.jpg/-a.jpg/')
显示的时间格式在文件名上形成一个19个字符长的前缀。如果我们假设您不需要处理其他前缀,那么您可以将这些文件的列表通过管道传输到以下perl脚本,如ls*.jpg | perl first19match.pl 将以下代码保存在名为first19match.pl的文件中 输出为:
possible duplicates:
2020-07-03-21_56_51-a.jpg
2020-07-03-21_56_51-b.jpg
possible duplicates:
2020-07-03-21_50_34-fhv.asd
2020-07-03-21_50_34-cubj.tgg
您可以尝试使用perl oneliner,它根据文件名中u之前的时间戳将文件列表推送到哈希列表中
ls 2020* | perl -F"_" -lane 'push @{$list{$F[0]}}, $_; END { foreach $k (keys %list) { print join ",", "duplicates?", @{$list{$k}} } }'
相同的文件是什么意思?它们的内容是一样的吗?或者你只想通过时间戳来匹配它们,而不管它们的内容是什么?@choroba文件略有不同,这意味着我无法比较它们的哈希值。我想要的是打印这两个文件名,因为前缀everything to-a,-b都是相同的@BryanK,尽管我同意至少应该有最小的可复制示例,但我认为我在我的示例中已经很好地解释了我需要什么。虽然有-a和-b文件,但我没有找到上面的bash脚本。is else语句不应该颠倒吗?它对我很有用。我最初在脚本中有一个输入错误,请检查您是否有最新版本。在文件夹ls->2020-07-03-21_56_51-a.jpg 2020-07-03-21_56_52-b.jpg->not found未找到2020-07-03-21_56_51-a.jpgYes中的这两个文件,这是预期的,51!=你说得对,我试图重现我的第一次尝试时犯了错误。但我现在又试了一次,以前也试过多次,但还是没有找到
possible duplicates:
2020-07-03-21_56_51-a.jpg
2020-07-03-21_56_51-b.jpg
possible duplicates:
2020-07-03-21_50_34-fhv.asd
2020-07-03-21_50_34-cubj.tgg
ls 2020* | perl -F"_" -lane 'push @{$list{$F[0]}}, $_; END { foreach $k (keys %list) { print join ",", "duplicates?", @{$list{$k}} } }'