web-dev-qa-db-ja.com

リストのギャップを見つける方法は?

だから、私はたくさんのファイル(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  

それらはすべて同じように始まり、異なる終わりを持っています。
すべてが外付けHDDにあります。

1
Ceslovas
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を現在の数値と比較します

1

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
1