Я задаюсь вопросом, действительно ли возможно повторить значения как ниже описанного? Ситуация - существует слишком много файлов "документа", названных как "PLCI507_01234567.doc", и существует Форма в текстовом файле под названием "form.txt", похож ниже;
--------------------------------------------------------------------
Date:
Count :
--------------------------------------------------------------------
ID | Host | md5sum | Created |
--------------------------------------------------------------------
| | | |
| | | |
--------------------------------------------------------------------
Я уже могу создать файлы в том же формате для каждого, документирует, но теперь я хочу всю информацию в единственной форме, и форма должна быть обновлена с информацией о файле т.е. именем файла, созданной датой, md5sum и т.д.
md5sum = md5sum PLCI507_01234567.doc | awk '{ print $1 }' #sum of each file
Созданный = date +"%d/%m/%Y" #date of form update
Обновленный form.txt должен быть похожим ниже.
--------------------------------------------------------------------
Date: 4/14/2011
Count : 4
--------------------------------------------------------------------
ID | Host | md5sum | Created |
--------------------------------------------------------------------
01234567 | PLCI507 | 2b3dbf39a65eb140a163401001e32fb2 | 14/03/2011 |
01234560 | PLCI512 | 7aa31c83cc1b78fa9ae60460e1eb4731 | 22/04/2011 |
--------------------------------------------------------------------
Некоторое тело помогает мне с этим. Я надеюсь, что должен быть некоторый способ сделать это.
Спасибо!!
Вот сценарий, который генерирует этот файл и распечатает его приятно с printf.
Просто назовите его как: ./script_name.sh /path/to/docfiles/
#!/usr/bin/env bash
docFiles=$(find "$1" -iname '*.doc')
numFiles=$(echo -e "$docFiles" | wc -l)
sep="--------------------------------------------------------------------------------"
Date="Date: $(date +'%d/%m/%Y')"
Count="Count : $numFiles"
# Start printing file
echo $sep
echo $Date
echo $Count
echo $sep
printf ' %-10s | %-10s | %-33s | %-15s |\n' "ID" "Host" "md5sum" "Created"
echo $sep
for file in $docFiles
do
docMD5=$(md5sum "$file" | awk '{ print $1 }')
# This was a bit unclear in the question...
# if you want file mtime instead... use something like:
#docDate=$(stat -c %d/%m/%Y "$file")
#docDate=${docDate%% *}
docID=$(basename "$file" | sed -e 's/^\(.*\)_.*/\1/')
docHost=$(basename "$file" | sed -e 's/^.*_\(.*\)\.doc$/\1/')
# Use today's date
docDate=$(date +"%d/%m/%Y")
printf ' %-10s | %-10s | %-33s | %-15s |\n' "$docID" "$docHost" "$docMD5" "$docDate"
done
echo $sep
chmod +x script_name.sh
./script_name.sh /path/to/docfiles/
кажется необходимостью в цикле для доступа к каждому .doc файлу
i=0
for f in *.doc
do
((i++))
f=$(basename "$f")
# process each file
# ...
form_content="${form_content}$f_id | $f_host | $md5sum | $Created |\n"
done
если .doc файлы имеют имя фиксированной длины, можно разделить хост/идентификатор через Parameter Expansion
.
f_host="${f:0:7}"
f_id="${f:8:8}"
наконец, произведите результат как:
echo "--------------------"
echo "Date: `date +%d/%m/%Y`"
echo "Count: $i"
echo "--------------------"
echo "ID | Host | md5sum | Created |"
echo "--------------------"
echo -e "$form_content"
echo "--------------------"