因此,我分配了一些文件(167k),现在它们已经按正确的顺序排列,这要感谢这里的 Serg 脚本 -https://askubuntu.com/a/686829/462277。
现在我需要找出文件名之间的差距,差距应该是15个或更多
Aaaa.bb - 000002 tag tag_tag 9tag
Aaaa.bb - 000125 tag tag_tag 9tag
Aaaa.bb - 000130 tag tag_tag 9tag
它们都有相同的开头和不同的结局。
所有内容都在外部硬盘中。
答案1
find . -maxdepth 1 -type f -regextype posix-awk -iregex ".*[:digit:]"| sort | awk '{ if ( ($3 - previous) > 15 ) print previous"**"$3}{ previous=$3 }'
上述代码使用find
命令匹配当前目录中所有包含数字的文件,对它们进行排序,然后传递给awk
。awk
遍历列表,将字段 3 中的每个数字存储到变量中previous
,并在下一个项目中previous
与当前数字进行比较
答案2
一个 Python 版本(准确地说是 python3)。
以以下名称保存程序diff_filename.py
(使其可执行)并以以下方式使用它:
$ ./diff_filename.py the/directory/containing/the/files
该程序假定您想要比较的数字始终位于文件名的相同位置(索引 10:16)。
现在,它非常冗长,并打印出正确的文件名,包括差异。一旦它遇到不尊重最小差异的文件名,它就会将其打印出来并停止。
这是源代码:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''
usage: ./diff_filename.py the/directory/containing/the/files
'''
import os
import sys
MIN_DIFF = 15
the_dir = sys.argv[1]
sorted_files = sorted(os.listdir(the_dir))
last_number = None
last_file = None
for current_file in sorted_files:
current_number = int(current_file[10:16])
if last_number is None:
last_number = current_number
last_file = current_file
continue
diff = current_number - last_number
if diff < MIN_DIFF:
print('fail! "{}" and "{}" do not respect MIN_DIFF={}'.format(
last_file, current_file, MIN_DIFF))
break
else:
print('ok! "{}" and "{}" diff={}'.format(last_file, current_file, diff))
last_number = current_number
last_file = current_file