ファイル拡張子に基づいてテキストエディタで特別なロジックを呼び出す簡単な方法はありますか?
たとえば、ファイルコレクションを含むzipファイルがあるとします。
text.txt
image.jpg
othercrap.crap
vi myarchive.zip
ファイル拡張子ベースの手段でファイルを開くときにテキストエディタに自動的にコマンドを実行させる方法はありますか?
答え1
「上記でviを使用することができ、テキスト部分が自動的にフォーマットされる方法を知ることができれば良いでしょう。」しかし、それはおそらくあなたが望むものです(テストされていません)。
#!/usr/bin/env bash
tmp=$(mktemp) || exit 1
trap 'rm -f "$tmp"; exit' 0
edit_zip() {
unzip "$1" > "$tmp" &&
vi "$tmp" &&
zip "$tmp" > "$1"
}
edit_pdf() {
pdf2text "$1" > "$tmp" &&
vi "$tmp" &&
text2pdf "$tmp" > "$1"
}
act_ext="${1}_${2##*.}"
if declare -F "$act_ext" > /dev/null; then
"$act_ext" "$3"
else
printf 'Operation "%s" not supported.\n' "$*"
fi
myprog
myprog edit myfile.zip
上記は、あなたの質問に示すように、あなたが電話したいものです。
unzip
上記はzip
正確にパラメータファイルまたはzipファイルで実行したいコマンドではない可能性がありますpdf2text
。上記は単にアイデアを提供するためのものです。サポートtext2pdf
する各タスク(タスク+拡張)を実行する別の関数を作成し、スクリプトに渡された引数に従って適切な関数を自動的に呼び出します。edit
.zip
答え2
使用幸せ(以前のPerl_6)
Proc
A:外部コマンド呼び出しを表す独自のクラスオブジェクトを設計/実行できます。以下をスクリプトとして保存して実行します。
my $proc = run 'echo', 'Hallo world', :out;
my $captured-output = $proc.out.slurp: :close;
say "Output was $captured-output.raku()";# OUTPUT: «Output was "Hallo world\n"»
B. シェルを含めることを望まないかもしれないので、独自のRakuクイフを作成し、特定のディレクトリのdir()
ファイルを指すことができます。以下は、ファイルとファイル作成日を.jpeg
ファイルごとに1行ずつ返します。.jpeg
~$ raku -e 'for dir( test => /:i '.' jpe?g $/ ) -> $file {
say join "\t", $file, $file.IO.created.DateTime;
}
https://docs.raku.org/type/Proc
https://docs.raku.org/routine/dir
C. Rakuには、作業設計/実行に役立つAkeモジュール/スクリプトがあります。
~/Ake_Morning$ cat Akefile
task 'buy-food', {
say 'Bought a salad.'
}
task 'shower', {
say 'Showered.'
}
task 'morning' => <shower buy-food>;
task 'dinner' => <buy-food>, {
say 'Yummy!'
}
次に、次のようake
にバイナリを実行しますAkefile
。
~/Ake_Morning$ ake
Task “default” does not exist
Did you mean one of these?
buy-food
dinner
help
morning
shower
~/Ake_Morning$ ake morning
Showered.
Bought a salad.
D. RakuにはSparrow6(DSL)とTomtit(タスクランチャー)エコシステムもあり、どちらもyaml
D. Sparrowは1. Raku、2. Perl、3. Bash、4. Python、5. Ruby、6. Powershellの6つの言語です。でジョブを実行できます。
https://github.com/melezhik/Tomtit
https://github.com/melezhik/Sparrow6/blob/master/documentation/dsl.md
https://raku.org