フォルダ(ディレクトリ)の階層に紛れた同名ファイルを探す
フォルダの数や階層が多くなると、うっかりファイルを複製してしまい、似て非なるファイルが階層の中に残っていて、検索時や編集時に問題を起こしやすい。
実は、しばらく使っていた階層管理のできるノートアプリにたっぷりたまったテキストファイルを機械的に移行するツールで他のノートアプリに持っていったら、どうやら複数の同名ファイルが存在していた。この際、すっきりと一掃してしまおうと、同名のファイルを見つけやすくするよう、ファイルリストを作成するプログラムを書いた。
プログラムの仕様
- フォルダーのすべての階層をたどって、ファイル名+フォルダー名のリストを作る
- リストをソートして、拡張子の前のファイル名が同じものに印を付ける
- 同じファイルでも微妙に名前が違っている可能性があるので、すべてのリストを出力
といったところ。全てのリスト(ファイル名順に並んでいる)を出力して、印のついたものと、印は付いていないものの、似たような名前が並ぶのを人の目で見て判断することもできるようにした。
(嫌なら印のついたものだけ見ればよい)
リストを作るプログラム(Python)
リストは、ファイル名とフォルダ名を「:」で区切って作成。
ファイル名の上昇順に並べる。
同じファイル名(拡張子の前)があったら、「***** duplicated file?? ****」を後ろに付ける。
調べるフォルダは、カレントのフォルダを最上位として探索する。
出力されるリストのファイル名は「out.txt」で、UTF-8 改行はLFのみとなっているので、環境に応じて修正して利用してください。
まだまだ、Python初心者なので、あちこちのWebサイトの情報を組み合わせて作りました。
ご意見、ご教授大歓迎です。
# !/usr/bin/python
# -*- coding: utf-8 -*-
import codecs
import os
oList = []
odata = ""
prev = "...."
for root, dirs, files in os.walk(u'.'):
for file_ in files:
filename = file_
itm = filename + u' : ' + root
oList.append(itm)
oList.sort()
for data_ in oList:
wList = data_.split('.')
if prev in wList[0] :
data_ = data_ + " ***** duplicated file?? ****"
prev = wList[0]
odata = odata + data_ + "\n"
fout = codecs.open(u'out.txt',"w","utf-8")
fout.write(odata)
fout.close()