열의 일치하는 정보를 기반으로 하위 디렉터리 삭제

열의 일치하는 정보를 기반으로 하위 디렉터리 삭제

CSV 파일의 해당 디렉터리에 있는 하위 디렉터리만 유지하고 싶습니다. 파일 구조는 다음과 같습니다.

100_folder/
├── folder_11
├── folder_25
├── folder_31
└── folder_41
210_folder/
├── folder_13
├── folder_23
├── folder_31
└── folder_42

CSV 형식의 정보:

Col6,Col26
100,folder_11
100,folder_13
100,folder_41
210,folder_31
210,folder_42

열의 정보를 기반으로 CSV 파일에 존재하지 않는 하위 디렉터리를 삭제하고 싶습니다.

이것이 내가 파일을 읽는 방법입니다.

eCollection=( $(cut -d ',' -f6,26 file.csv ) )
echo "${eCollection[@]}"

답변1

물론 우리는 솔루션을 제공할 수 있습니다. 하지만 재미는 어디에 있습니까?

csv에 없는 모든 폴더가 삭제되기 때문에 귀하의 요구 사항이 위험해 보인다고 말씀드리겠습니다(오타, 잘못된 파일 형식/줄 끝 또는 후행 공백을 상상해 보세요).

그럼 쉘(스크립트)에서 텍스트 파일 처리를 잘하는 친구 세 명을 소개하겠습니다.

  • 문자열 연산(변수)
  • grep텍스트 검색 core-util(파일 내용, 읽기 전용)
  • find파일 검색 core-util(파일 이름)

완전히 이해하지 못하는 코드는 절대 사용하지 마세요!

#!/bin/sh

csvfile='index.txt'
csvseparator=','

cut -d ',' -f6,26 file.csv > index.txt

for subdir in ./*/*/
  do
    subdir=${subdir%/}
    dir=${subdir%/*}
    parent=${dir%/*}
    subdir=${subdir##*/}
    dir=${dir##*/}
    if grep -Fxq "${dir%_*}$csvseparator$subdir" "$csvfile"
      then
        echo "ok: $parent/$dir/$subdir"
      elif grep -wq "^${dir%_*}" "$csvfile"
        then
          echo "no: $parent/$dir/$subdir"
#          find "$parent/$dir/$subdir" -delete
    fi
done

관련 정보