多数の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