복구한 데이터의 양은 약 2.8TB(예, 테라바이트)입니다. 중복 여부를 검사할 예정입니다. 이 파일이 있는 시스템은 꽤 오래되었고 메모리는 2GB밖에 없습니다(그러나 LVM에서는 잘 작동합니다). 중복 스캔으로 인해 고통이 요구됩니다.
내 질문은 데비안에서 해당 파일 형식의 폴더로 파일을 이동하고 파일 형식 목록을 지정할 필요 없이 필요할 때 자동으로 이름을 바꾸도록 하려면 어떻게 해야 하는지입니다.
약 800GB의 여유 공간이 있으므로 데이터를 실행하기 전에 몇 가지 테스트를 수행할 수 있습니다.
답변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 ---"
답변2
다음과 같은 디렉토리로
$ ls
another.doc file.txt file1.mp3 myfile.txt
다음 명령을 사용하여 파일 확장자 목록을 작성할 수 있습니다.
$ exts=$(ls | sed 's/^.*\.//' | sort -u)
그런 다음 파일을 하위 디렉터리로 이동하는 확장명을 반복할 수 있습니다.
$ for ext in $exts
> do
> echo Processing $ext
> mkdir $ext
> mv -v *.$ext $ext/
> done
이것이 실행되면 다음과 같은 출력을 얻습니다.
Processing doc
'another.doc' -> 'doc/another.doc'
Processing mp3
'file1.mp3' -> 'mp3/file1.mp3'
Processing txt
'file.txt' -> 'txt/file.txt'
'myfile.txt' -> 'txt/myfile.txt'
결과:
$ ls
doc/ mp3/ txt/
$ ls *
doc:
another.doc
mp3:
file1.mp3
txt:
file.txt myfile.txt