디렉토리의 내용을 기준으로 파일을 분류하는 방법은 무엇입니까?

디렉토리의 내용을 기준으로 파일을 분류하는 방법은 무엇입니까?

많은 수의 CSV 파일이 포함된 디렉터리가 있습니다. CSV 파일에는 많은 열이 있으며 그 중 첫 번째 열은 타임스탬프(UNIX 시대 이후의 초 수)입니다. 각 파일의 첫 번째 행에 있는 타임스탬프 열 값을 기준으로 디렉터리의 파일을 분류하고 싶습니다. (파일에 헤더 라인이 없습니다).

나는 2분마다 디렉터리에서 실행되고 다음 레이아웃에 따라 하위 디렉터리의 파일을 정렬하는 bash 스크립트를 원합니다.

YYYY/
  └── MM/
       └── DD/

가능합니까? 어떻게 해야 하나요?

CSV 파일의 내용은 다음과 같습니다.

timestamp,A,B,C,D,E,F,G,H,I

예를 들어:

1565592149,A,B,C,D,E,F,G,H,I

답변1

어쩌면 다음과 같은 것일 수도 있습니다.

#! /bin/bash -
for f in *.csv; do
  IFS=, read -r timestamp rest < "$f" &&
    printf -v dir '%(%Y/%m/%d)T' "$timestamp" &&  
    mkdir -p -- "$dir" &&
    mv -- "$f" "$dir/"
done

예:

$ head -- *.csv
==> test2.csv <==
1328012580,A,B,C,D,E,F,G,H,I

==> test.csv <==
1565592149,A,B,C,D,E,F,G,H,I
$ that-script
$ tree
.
├── 2012
│   └── 01
│       └── 31
│           └── test2.csv
└── 2019
    └── 08
        └── 12
            └── test.csv

6 directories, 2 files

답변2

질문의 "2분마다" 부분을 완료하려면 Stephane Chazelas가 만든 것과 같은 스크립트를 넣고 cron 작업을 사용하여 호출할 수 있습니다.

예를 들어, CSV 파일이 이 폴더에 있으면 /home/user/data스크립트는 다음 위치에 있습니다.script.sh

  • crontab -e그런 다음 사용자의 crontab 편집을 실행할 수 있습니다
  • 파일 끝에 추가할 파일*/2 * * * * cd /home/user/data && /home/user/data/script.sh

이렇게 하면 스크립트가 2분마다 실행됩니다. 빈도를 변경하려면 *사용할 수 있는 섹션을 변경하면 됩니다.크론탭 마스터crontab 설정에 익숙하지 않은 경우.

관련 정보