Як я можу оновити форму за допомогою скрипта shell / bash в Linux?


0

Мені цікаво, чи можна повторити значення, як описано нижче? Ситуація така - є занадто багато файлів "doc", названих на зразок "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 |
--------------------------------------------------------------------

Будь ласка, якийсь орган допоможе мені в цьому. Я сподіваюся, що для цього повинен бути якийсь спосіб.

Дякую!!

Відповіді:


1

Ось сценарій, який генерує цей файл, і добре друкує його з 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/

працює добре, але якщо я запускаю цей скрипт у тому ж каталозі наступного разу, він також генерує результати для старого .. :( і якщо я натискаю результат на текстову плитку, наступного разу він створює новий файл, але і зі старою інформацією. .. будь-яке рішення для уникнення старого файлу та оновлення лише одного файлу?
Гімалай

Як саме воно має працювати? Якщо ви запустите його на всіх файлах у каталозі вдруге ... чи слід шукати лише нові файли? А як із зміненими файлами? Також має бути поле "Створене" mtime, ctime чи просто date +"%d/%m/%Y"? Здається, ви хочете, щоб він оновлював один файл ... яка очікувана поведінка?
TrinitronX

у каталог багато файлів, що завантажуються щохвилини, і так, слід шукати лише нові файли, а потім оновлювати файл запису. Я думаю, що краще перевірити в створеному mtime або md5sum ??
Гімалай

1

здається, вам потрібна петля для доступу до кожного файлу .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 файли мають ім'я фіксованої довжини, ви можете зняти хост / id через 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 "--------------------"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.