读取子目录中的文件并移动到带有时间戳的单个位置

读取子目录中的文件并移动到带有时间戳的单个位置

我需要将所有文件从多个子目录移动到一个目录中,并为其添加时间戳。

我有以下目录结构,

Interface/Temp/GoodsRecipt/GR123/abc.csv, cad.csv    
Interface/Temp/GoodsRecipt/GR456/abc.csv, cad.csv

我想将 CSV 文件从随机目录移动到单个目录中,并将时间戳添加到文件中。结果应该如下所示,

Interface/Temp/GoodsRecipt/GRout/abc05082014.csv,  cad05082014.csv, abc06032014.csv, cad06032014.csv

我需要编写一个shell脚本并独立运行来完成此操作。任何有关 shell 脚本创建的帮助将不胜感激。

答案1

INDIR='./Interface/Temp/GoodsRecipt'
OUTDIR='./Interface/Temp/GoodsRecipt/GRout'

mkdir -p "$OUTDIR"

find "$INDIR"/GR*/ -type f -name '*.csv' | while IFS= read f ; do
  fd=$(date +'%Y%m%d' -d @$(stat -c %Y "$f"))
  bn=$(basename "$f" .csv)
  mv "$f" "$OUTDIR/$bn$fd.csv"
done

注意:我在这里使用了 YYYYMMDD 而不是 DDMMYYYY。它成为一种优越的日期格式的原因有很多,但最重要的原因之一是它是唯一正确排序的格式。

另一个重要原因是它是明确的,因为没有人使用 YYYYDDMM。但 05082014 可能意味着“2014 年 5 月 8 日”(如果您是美国人),也可能意味着“2014 年 8 月 5 日”(几乎世界其他地方)。使用该格式是不安全的,因为无法判断哪个是预期含义。

如果您坚持使用 DDMMYYYY,请将日期命令更改为date +'%d%m%Y'

  fd=$(date +'%d%m%Y' -d @$(stat -c %Y "$f"))

相关内容