ファイルの種類に応じてファイルをフォルダーに並べ替える

ファイルの種類に応じてファイルをフォルダーに並べ替える

約2.8TB(例えばテラバイト)のデータを回復しました。重複した項目があるかどうかを確認します。このファイルを含むシステムはかなり古く、RAMは2GBしかありません(ただしLVMでは正常に動作します)。したがって、次の操作が繰り返されます。それをスキャンすることは痛みを追求することです。

私の質問は、ファイル形式のリストを指定せずにDebianでファイルをそのファイル形式のフォルダに移動し、必要に応じて自動的に名前を変更する方法です。

約800 GBの空き容量があるため、データを実行する前にいくつかのテストを実行できます。

ベストアンサー1

私はStephenのコードをスクリプトでラップし、パイプラインを少し改善しました。

#!/bin/bash 
set -e 
set -u 
set -o pipefail

start=$SECONDS

exts=$(ls -dp *.*| grep -v / | sed 's/^.*\.//' | sort -u) # not folders
ignore=""

while getopts ':f::i:h' flag; do
  case "$flag" in
    h)
        echo "This script sorts files from the current dir into folders of the same file type. Specific file types can be specified using -f."
        echo "flags:"
        echo '-f (string file types to sort e.g. -f "pdf csv mp3")'
        echo '-i (string file types to ignore e.g. -i "pdf")'
        exit 1
        ;;
    f)
        exts=$OPTARG;;
    i)
        ignore=$OPTARG;;
    :) 
        echo "Missing option argument for -$OPTARG" >&2; 
        exit 1;;
    \?)
        echo "Invalid option: -$OPTARG" >&2
        exit 1
        ;;
  esac
done

for ext in $exts 
do  
    if [[ " ${ignore} " == *" ${ext} "* ]]; then
        echo "Skiping ${ext}"
        continue
    fi
    echo Processing "$ext"
    mkdir -p "$ext"
    mv -vn *."$ext" "$ext"/
done

duration=$(( SECONDS - start ))
echo "--- Completed in $duration seconds ---"

おすすめ記事