LibreOffice.org:コマンドラインから新しいファイルを作成する

LibreOffice.org:コマンドラインから新しいファイルを作成する

私は私のコマンドラインが好きです。次のように入力できることが気に入ります。

emacs non-existing-file.txt

その後、emacsまだ存在しないファイルの編集を開始しますが、保存すると名前がnon-existing-file.txt

私はLibreOffice.orgも好きですが、次のように同じことを行う方法を見つけることができませんでしたemacs

lowriter non-existing.odt

LibreWriterが開きますが、ファイルは生成されません。代わりにファイルが存在しないと文句を言います。

lowriterこのディレクトリでという名前の新しいファイルを起動しようとしていることをコマンドラインから知る方法はありますかnon-existing.odt

答え1

この機能は2002年にOpenOfficeを要求するそしてリブレオフィス2011。現時点では、両方のプロジェクトは実装されていません。

解決策は、どこかに空のファイルを作成し、コピーを作成して新しいファイルを作成することです。ただし、これにより、作成日などの元の生成のメタデータが維持されるため、結果は新しい文書を生成するのとは異なります。検証されていません。

#!/bin/sh
# Create a new file if the argument does not exist. Do it only if there is a single
# argument and no option.
if [ $# -eq 1 ]; then
  case "$1" in
    -*) :;;
    *)
      if ! [ -e "$" ]; then
        basename="${1##*/}"
        case "$basename" in
          *.*)
            extension="${basename##*.}"
            cp ~/templates/default."$extension" "$1" || exit $?
        esac
      fi;;
  esac
fi

exec loffice "$@"

空のファイルを変換するとテキスト文書(.odt)を作成できますが、他の種類の文書は作成できません(Libreoffice 5.1.6.2を使用)。理由はわかりません。

#!/bin/sh
set -e
# Create a new file if the argument does not exist. Do it only if there is a single
# argument and no option.
if [ $# -eq 1 ]; then
  case "$1" in
    -*) :;;
    *)
      if ! [ -e "$" ]; then
        basename="${1##*/}"
        case "$basename" in
          *.*)
            extension="${basename##*.}"
            empty_file=$(mktemp)
            unoconv -f "$extension" -o "$1" "$empty_file"
            rm -f "$empty_file"
        esac
      fi;;
  esac
fi

exec loffice "$@"

答え2

問題と解決策

これが可能だと期待していましたが、そうではありません!最近入社申請書を作成しましたが、毎回新しい履歴書/自己紹介書を手動で作成するのは退屈でした。

私の解決策は、履歴書と自己紹介を保存する「base」というディレクトリを作成することでした。

これにより、bashスクリプトは別の場所にある別の「scripts」フォルダに保存されます。名前は「apply.sh」です。

コード、例、ファイル構造

新しい履歴書(または履歴書)ファイル生成の例:

apply.sh -r important_business_job

# creates...

~/.../your_job_applications_folder/cv_your_name_here_important_business_job.docx

私が使用するコードは次のとおりです。

# Takes a CV or cover letter and copies it with the role name changed.
#! /bin/bash

if getopts c:r: name
then
    case $name in
        c)OUTFILE= cover_letter_your_name_here_${OPTARG}.docx; INFILE=base/base_cover_letter.docx;;
        r)OUTFILE=cv_your_name_here_${OPTARG}.docx; INFILE=base/base_cv.docx;;
        *)echo "Invalid argument. Please select either 'r' for resume or 'c' for cover letter";;
    esac
    cp $INFILE $OUTFILE
else
    echo "Please select the type of file to create (either 'r' for resume or 'c' for cover letter)"
fi

shift $(($OPTIND -1))

ファイル構造:

your_job_applications_folder
├── base
│   ├── base_cover_letter.docx
│   └── base_cv.docx
└── NEW_FILES_GO_HERE

それでは、これはこの記事とどのような関係がありますか?

同じ「デフォルト」フォルダ設定を使用すると、毎回base.docx文書から空の文書をコピーして、コードを変更して新しい文書を効果的に生成できます。ただし、これにより元のメタデータが保存される可能性があります。

関連情報