シナリオ:
Locky ウィルスが猛威を振るう中、私が勤務するコンピュータ センターでは、Recuva などのツールを使用してファイルを回復する唯一の方法を発見しました。Recuva の問題は、回復したすべてのファイルを 1 つのディレクトリにダンプすることです。ファイル拡張子に基づいて、これらすべてのファイルをカテゴリに移動したいと思います。すべての JPG を 1 つに、すべて BMP を別のものに ... など。Stackoverflow を調べて、他のさまざまな質問と回答に基づいて、小さな bash スクリプト (サンプル提供) を作成しました。拡張機能がめちゃくちゃだと思います。
コード:
#!/bin/bash
path=$2 # Starting path to the directory of the junk files
var=0 # How many records were processed
SECONDS=0 # reset the clock so we can time the event
clear
echo "Searching $2 for file types and then moving all files into grouped folders."
# Only want to move Files from first level as Directories are ok were they are
for FILE in `find $2 -maxdepth 1 -type f`
do
# Split the EXT off for the directory name using AWK
DIR=$(awk -F. '{print $NF}' <<<"$FILE")
# DEBUG ONLY
# echo "Moving file: $FILE into directory $DIR"
# Make a directory in our path then Move that file into the directory
mkdir -p "$DIR"
mv "$FILE" "$DIR"
((var++))
done
echo "$var Files found and orginized in:"
echo "$(($diff / 3600)) hours, $((($diff / 60) % 60)) minutes and $(($diff % 60)) seconds."
質問:
500,000 以上のファイルを処理しながら、これをより効率的にするにはどうすればよいですか? 検索は、ファイルのリストを取得するのに永遠にかかり、ループ内でディレクトリを作成しようとします (そのパスが既に存在する場合でも)。可能であれば、ループのこれら 2 つの特定の側面をより効率的に処理したいと考えています。