많은 수의 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 설정에 익숙하지 않은 경우.