如何创建清单脚本

如何创建清单脚本

我有类似目录中的文件列表

sales_01
product_01

我正在对同一目录中的这些文件进行加密。现在我有文件列表,例如

sales_01
product_01
sales_01.gpg
product_01.gpg

现在我的问题是我必须创建包含该列的清单文件。双引号应该出现

"original_filename" "original_filesize" "encrypted_filesize" "md5sum(value of encrypted file)"

请帮我解决这个问题。

答案1

我假设您的文件名没有嵌入换行符。

在 Linux 上:

#! /usr/bin/env bash
find /some/dir -type f -maxdepth 1 \! -name '*.gpg' | \
while read -r f; do
    esc=${f##*/}
    esc=${esc//\\/\\\\}
    esc=${esc//\"/\\\"}
    md5=$(md5sum "$f".gpg | awk '{print $1}')
    printf '"%s" "%d" "%d" "%s"\n' "$esc" $(stat -c %s "$f") $(stat -c %s "$f".gpg) "$md5"
done

在 *BSD 上:

#! /bin/sh
find /some/dir -type f -maxdepth 1 \! -name '*.gpg' | \
while read -r f; do
    esc=$(printf '%s\n' "$f" | sed 's#.*/##; s/\([\\"]\)/\\\1/g')
    md5=$(md5 -q "$f".gpg)
    printf '"%s" "%d" "%d" "%s"\n' "$esc" $(stat -f %z "$f") $(stat -f %z "$f".gpg) "$md5"
done

答案2

嗯,它不是很漂亮,但这应该可行。

for i in $(ls | cut -d. -f1 | uniq); do if [ -f $i.gpg ]; then base_size=$(ls  -al $i| cut -d" " -f5); gpg_size=$(  ls  -al $i.gpg| cut -d" " -f5); md5_sum=$(md5sum $i.gpg | awk '{ print $1 }') ; echo  $i $base_size $gpg_size $md5; fi; done

相关内容