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

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

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

관련 정보