Итак, у меня есть много файлов (167 Кб), и теперь они теперь в правильном порядке, благодаря скрипту Серга здесь - 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
Все они начинаются одинаково и имеют разные окончания.
Все находится на внешнем жестком диске.
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
текущему номеру
версия в Python (python3, чтобы быть точным).
сохраните программу ниже под именем diff_filename.py
(сделайте это exectuable), и используйте его следующим образом:
$ ./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
# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. lp rt5390sta # Generated by sensors-detect on Thu Sep 4 09:16:43 2014 # Chip drivers coretemp
– makkekkazzo 8 January 2017 в 01:17