web-dev-qa-db-ja.com

数百万のファイルを含むディレクトリ(bash / python / Perl)から完全一致で数千のファイルを効率的に検索

私はLinuxを使用していて、数百万のファイルを含むディレクトリ(SOURCE_DIR)から数千のファイルを検索しようとしています。検索する必要があるファイル名のリストがあり、1つのテキストファイル(FILE_LIST)に保存されています。このファイルの各行には、SOURCE_DIR内のファイルに対応する単一の名前が含まれており、ファイルには数千行あります。

## FILE_LIST contain single Word file names, each per line
#Name0001
#Name0002
#..
#Name9999

ファイルを別のディレクトリ(DESTINATION_DIR)にコピーしたい。以下のループを作成しました。ループを1つずつ見つけるためのループが内部にあります。

#!/bin/bash
FILE_LIST='file.list'
## FILE_LIST contain single Word file names, each per line
#Name0001
#Name0002
#..
#Name9999

SOURCE_DIR='/path/to/source/files' # Contain millions of files in sub-directories
DESTINATION_DIR='/path/to/destination/files' # Files will be copied to here


while read FILE_NAME
do
    echo $FILE_NAME
    for FILE_NAME_WITH_PATH in `find SOURCE_DIR -maxdepth 3 -name "$FILE_NAME*" -type f -exec readlink -f {} \;`; 
    do 
        echo $FILE
        cp -pv $FILE_NAME_WITH_PATH $DESTINATION_DIR; 
    done
done < $FILE_LIST

このループには多くの時間がかかり、私の目標を達成するためのより良い方法があるかどうか疑問に思っていました。私は検索しましたが、私の問題の解決策は見つかりませんでした。すでに存在する場合は解決策をご案内するか、上記のコードに微調整を提案してください。別のアプローチまたはpython/Perlソリューションの場合も、私は元気です。お時間をいただきありがとうございます。

4
Insilico

locateではなくgrepを使用してfindを試してください。私はファイルインデックスdbを使用しているため、かなり高速です。 Sudo updatedbを実行して、事前にデータベースを更新することを忘れないでください。

0
Touten