如何根据目录中的文件内容对文件进行分类?

如何根据目录中的文件内容对文件进行分类?

我有一个包含大量 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 设置。

相关内容