我有类似目录中的文件列表
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