Iš Word DOCX į Obsidian: Automatinis DOCX Failų Konvertavimas į Markdown
Kaip dažnai būna, su laiku kompiuteryje prisikaupia nemažai įvairių dokumentų – tiek darbinių, tiek naminių. Kadangi dažnai naudojuosi Markdown formatą palaikančiomis aplikacijomis, tokiomis kaip Obsidian, pastebėjau, kad būtų labai patogu visus šiuos DOCX failus konvertuoti į Markdown formatą. Taip ne tik lengviau tvarkyti dokumentus, bet ir galima išnaudoti visus Obsidian teikiamus privalumus. Pasižiūrėjęs, ką Linux gali pasiūlyti šioje srityje, atradau „Pandoc“.
Kodėl „Pandoc“?
„Pandoc“ yra galingas įrankis, galintis konvertuoti failus tarp įvairių formatų. Tačiau paprasta komanda pandoc input.docx -o output.md
manęs nesužavėjo. Norėjau sukurti automatizuotą sprendimą, kuris būtų
pritaikytas mano poreikiams – tai yra, ne tik konvertuoti failus, bet ir
pritaikyti juos Obsidian naudojimui. Taigi, nusprendžiau sukurti Bash
scenarijų, kuris atliktų visą šį darbą automatiškai.
Ką gali šis scenarijus?
Šis scenarijus gali:
- Pakeisti failų pavadinimus, kad juose nebūtų neleistinų simbolių.
- Konvertuoti visus DOCX failus į Markdown formatą.
- Pridėti specialias „properties“ (tagus) prie konvertuotų failų, kad jie būtų paruošti naudojimui Obsidian.
Atnaujinta:
Po konvertavimo, originalūs DOCX failai suzipuojami ir ZIP failas perkeliamas į archyvavimo katalogą$HOME/Archyvuoti/
. Jei ZIP failo pavadinimas jau egzistuoja, sukuriamas naujas pavadinimas su numeriu, kad išvengtų perrašymo. Galiausiai, sėkmingai atlikus visas operacijas, originalūs DOCX failai pašalinami iš pradinio katalogo.
- Pridėti specialias „properties“ (tagus) prie konvertuotų failų, kad jie būtų paruošti naudojimui Obsidian.
Scenarijaus veikimo principas
Failų pavadinimų keitimas
Pirmiausia scenarijus keičia visų DOCX failų pavadinimus, pašalindamas neleistinus simbolius. Tai atliekama naudojant sed
komandą, kuri pakeičia neleistinus simbolius į pabraukimo simbolius (_
).
DOCX konvertavimas į Markdown
Kiekvienas DOCX failas yra konvertuojamas į Markdown formatą
naudojant „Pandoc“. Ši dalis yra gana tiesmuka, tačiau aš taip pat
norėjau pridėti tam tikrus „properties“, kad būtų lengviau naudoti šiuos
failus Obsidian. Todėl po kiekvieno konvertavimo prie failo pridedu
YAML antraštę su žymėmis (tags
).
Scenarijaus kodo pavyzdys
Štai galutinis scenarijus, kurį naudoju:
#!/bin/bash
# Nustatykite docx failų katalogą
docx_dir="$HOME/Dokumentai/"
# Nustatykite markdown failų katalogą
md_dir="$HOME/Obsidian/notes/"
# Nustatykite archyvavimo katalogą
archive_dir="$HOME/Archyvuoti/"
# Sukurkite archyvavimo katalogą, jei jis neegzistuoja
mkdir -p "$archive_dir"
# Funkcija, keičianti failų pavadinimus
function replace_filenames {
local files=("$1"/*.docx)
for file in "${files[@]}"; do
local filename=$(basename "$file")
local new_filename=$(echo "$filename" | sed 's/[^a-zA-Z0-9_.-]/_/g')
if [ "$filename" != "$new_filename" ]; then
mv "$file" "$1/$new_filename"
fi
done
}
# Funkcija, konvertuojanti docx į markdown ir pridedanti norimą turinį
function convert_to_md {
local file="$1"
local base_filename=$(basename "$file" .docx | tr ' ' '_')
local output_file="$md_dir/$base_filename.md"
pandoc -f docx -t markdown "$file" -o "$output_file"
if [ $? -eq 0 ]; then
echo -e "---\ntags:\n - docx\n - dokumentai\n---\n$(cat "$output_file")" > "$output_file"
echo "$file sėkmingai konvertuotas į $output_file."
else
echo "Klaida: Konvertuojant failą '$file' įvyko klaida."
fi
}
# Funkcija, sukurti unikalų zip failo pavadinimą
function generate_unique_zip_filename {
local base_filename="$archive_dir/konvertuoti_$(date +%Y%m%d)"
local zip_filename="$base_filename.zip"
local counter=1
while [ -f "$zip_filename" ]; do
zip_filename="${base_filename}_${counter}.zip"
counter=$((counter + 1))
done
echo "$zip_filename"
}
# Pakeisti failų pavadinimus, jei reikia
replace_filenames "$docx_dir"
# Gaukite docx failų sąrašą
docx_files=$(find "$docx_dir" -type f -name "*.docx")
# Patikrinkite, ar docx failai rasti
if [ -z "$docx_files" ]; then
echo "Klaida: Kataloge '$docx_dir' docx failų nerasta."
exit 1
fi
# Atspausdinkite docx failų sąrašą
count=1
echo "Pasiekiami docx failai:"
for file in $docx_files; do
base_filename=$(basename "$file" .docx | tr ' ' '_')
echo "$count. $base_filename.docx"
count=$((count+1))
done
# Paprašykite vartotojo pasirinkti failą arba visų failų konvertavimą
while true; do
echo "Pasirinkite, kaip norite konvertuoti failus:"
echo "1. Konvertuoti vieną failą"
echo "2. Konvertuoti visus failus į atskirus markdown failus"
read -p "Įveskite pasirinkimą (1 arba 2): " choice
if [ "$choice" == "1" ] || [ "$choice" == "2" ]; then
break
else
echo "Klaida: Netinkamas pasirinkimas. Bandykite dar kartą."
fi
done
converted_files=()
# Konvertuokite failus pagal vartotojo pasirinkimą
if [ "$choice" == "1" ]; then
while true; do
echo -n "Įveskite konvertuoti norimo docx failo numerį: "
read file_number
if [[ "$file_number" =~ ^[0-9]+$ ]] && [ "$file_number" -ge 1 ] && [ "$file_number" -lt "$count" ]; then
selected_file=$(echo "$docx_files" | sed -n "${file_number}p")
convert_to_md "$selected_file"
converted_files+=("$selected_file")
break
else
echo "Klaida: Netinkamas įvestis. Bandykite dar kartą."
fi
done
else
for file in $docx_files; do
convert_to_md "$file"
converted_files+=("$file")
done
fi
# Užzipuoti visus originalius DOCX failus, iš kurių buvo atliktas konvertavimas
zip_filename=$(generate_unique_zip_filename)
zip -j "$zip_filename" "${converted_files[@]}"
# Perkelti suzipuotą failą į archyvavimo katalogą
mv "$zip_filename" "$archive_dir"
# Pašalinti originalius docx failus po sėkmingo konvertavimo ir archyvavimo
for file in "${converted_files[@]}"; do
rm "$file"
done
echo "Konvertavimas baigtas. Visi konvertuoti failai suzipuoti į $zip_filename ir perkelti į $archive_dir. Originalūs docx failai pašalinti."
Išvados
Šis scenarijus ne tik automatizuoja DOCX failų konvertavimą į Markdown, bet ir užtikrina, kad visi dokumentai būtų tinkamai archyvuoti ir saugomi. Dabar mano dokumentai yra patogiai prieinami Obsidian programoje, o pradiniai DOCX failai yra saugiai archyvuoti ir pašalinti iš pradinio katalogo.
Jei ir jūs turite daug DOCX failų ir norite juos patogiai konvertuoti bei archyvuoti, šis scenarijus gali būti puikus sprendimas jūsų poreikiams.
Komentarai
Rašyti komentarą