我有一个包含大量 CSV 文件的目录。 CSV 文件有许多列,其中第一列是时间戳(自 UNIX 纪元以来的秒数)。我想根据每个文件第一行中时间戳列的值对目录中的文件进行分类。 (文件中没有标题行)。
我想要一个每两分钟在目录上运行一次的 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大师如果您不熟悉 crontab 设置。