我需要将所有文件从多个子目录移动到一个目录中,并为其添加时间戳。
我有以下目录结构,
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"))