脚本复制文件,重命名并共享到azure blob



有一个文件夹,应用程序在其中生成不同的文件,如下所示。

Delhi_20221234556.csvMelbourne_20123456789.csvGoa_1234567890.csvSydney_2022345689.csv

脚本应该像下面这样从文件中删除数字,然后将它们复制到Azure blob存储,在将它们复制到Azure blob后,它应该将文件移动到带有日期的存档文件夹。

Delhi.csvMelbourne.csvGoa.csvSydney.csv

最初我是为Goa_1234567890.csv做的,如下所示。

#!/bin/bash
find /abc/def -type f -name 'Goa*' -execdir bash -c 'for f in "$@"; 
do mv "$f" "${f%%_*}.csv"; 
done' bash {} +
./azcopy cp "/abc/def/Goa.csv" "https://<Blobaccount>.blob.core.windows.net/abchomexyz?<SAS- Token>"
mv /abc/def/Goa.csv /abc/def/Archive/Goa$(date +%F).csv`

有没有人能帮助我改进上面的脚本来实现这一点?

您可能希望将脚本一般化以处理多个文件名除了Goa*。假设csv文件位于/abc/def目录(不在子目录中),请尝试:

#!/bin/bash
dir="/abc/def"
mkdir -p "$dir"/Archive/
for f in "$dir/"*.csv; do
    if [[ -f $f ]]; then
        new="${f%%_*}.csv"
        mv -- "$f" "$new"
        ./azcopy cp "$new" "https://<Blobaccount>.blob.core.windows.net/abchomexyz?<SAS- Token>"
        base="${new##*/}"
        mv -- "$new" "$dir/Archive/${base%.csv}$(date +%F).csv"
    fi
done

请注意,它不考虑有多个的情况具有相同城市名称但编号不同的文件名。

最新更新