多数の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の設定に慣れていない場合。