나는 각 디렉토리에 수백만 개의 파일이 들어 있는 수백 개의 디렉토리를 받았습니다. 예:
DirA
+----+ A_000001.txt
|
+ A_000002.txt
|
+ ... etc..
000001부터 999999까지의 모든 숫자에 대해 파일이 존재하는지 확인하고 싶습니다. 따라서 파일이 A_678123.txt
누락된 경우 도구에서 이를 보고해야 합니다. 현재 비트 배열을 생성 중이며 ls
출력을 가져와 구문 분석된 파일 번호에 해당하는 모든 비트 위치에 대해 1을 설정합니다.
내 해킹된 Python 스크립트를 대체할 수 있는 도구(또는 도구 조합)가 있습니까?
답변1
seq
한 가지 방법은 , sort
및 다음을 조합하여 사용하는 것입니다 uniq
.
# Get a list of all the files in DirA
cd DirA
ls . > files.txt
# Get a list of all expected files
seq -f "A_%06.0f.txt" 0 999999 > expected.txt
# Find unique entries
sort files.txt expected.txt | uniq -u
seq
파일 이름과 일치하도록 인수를 조정해야 할 수도 있습니다 .
일단 작동하면 임시 파일을 사용하지 않고 시도해 볼 수 있습니다.
cd DirA
sort <(ls .) <(seq -f "A_%06.0f.txt" 0 999) | uniq -u
그런 다음 모든 디렉터리를 검색할 준비가 되면 다음을 수행하세요.
for d in ./*/; do
pushd "$d"
sort <(ls .) <(seq -f "A_%06.0f.txt" 0 999) | uniq -u
popd
done
각 디렉터리와 해당 디렉터리에서 누락된 모든 파일을 나열하는 다음과 유사한 출력이 표시됩니다.
./DirA/
A_000371.txt
./DirB/
A_000881.txt
./DirC/
A_000101.txt
A_000191.txt