ラベル シェルスクリプト の投稿を表示しています。 すべての投稿を表示
ラベル シェルスクリプト の投稿を表示しています。 すべての投稿を表示

2017年4月4日火曜日

Macの初期設定を1発でキメる。

お久しぶりです.Jです.

毎年のことながら,PCの初期設定って面倒くさいですよね.Homebrew入れてBrew Cask入れてApp Storeでアプリケーション落としてきて,あれ後何が必要だっけ?となり,おまけにLatexのパッケージのアップデートは永遠に終わらないし….
そこで1コマンドで設定を完了させるスクリプトを作りました.こちらからどうぞ.
使い方(というほどのこともありませんが)はZipでダウンロードしてきて解凍して,ターミナル開いて実行するだけです.いくつかのステップに分割してあるので,途中エラー等で止まってしまったらそこから再開してください.あれ,1コマンドじゃな…


Latexのパッケージも,フルインストールではなくTex Shopやら要らないものを省いた最小構成にしてあるのでアップデートにもそこまで時間は掛からないと思います.
以下の記事などを参考にさせていただきました.ありがとうございます.
Homebrewで最小構成のTeX環境を構築する - WEB SALAD
OS X (El-Capitan) に最小限の LaTeX 環境を構築


ちなみに私はMacupというツールを使って新しいMacの設定やアプリケーションを1コマンドでメインのものと同期させてインストールするようにしています.PCを換えたり初期化し直す際に非常に便利です.上のスクリプトはこれの簡易版ということになります.

2016年8月23日火曜日

風のごとくコンパイルする

風キッズの皆さんお久しぶりです。
今回は風のようにコンパイルする方法を紹介します。
基本的には以前の記事と同じ内容になりますが多少改良を加えてみました。
ここでは/usr/local/binにパスが通っているものとします。

$ sudo vi /usr/local/bin/compile

でコマンドを作成し、以下をコピペしてください。

#!/bin/sh
# Compile C file.
set -Cue

if [ $# == 0 ]
then
    echo "No argument."
    exit 1
fi

if [ -f $1.c ]
then
    gcc -o $1 $1.c -lm -lfftw3 -x c -g -Wall -Wextra ${@:2}
else
    echo "No such a C file."
    exit 1
fi

実行権限を与えます。
$ sudo chmod +x /usr/local/bin/compile

これでどこでもhoge.cを
$ compile hoge -option1 -option2
でコンパイルできます。

ある順番以降の任意の個数の引数を後ろにつける方法はこちらの記事を参考にしました。
また、gccの警告オプションについての説明はこちらの記事なんかがいいんじゃないかと思います。

2013年10月20日日曜日

tex✈pdfをコマンドで








全力歯ぎしりレッツゴー!

おはようございます。
texソースからpdfに変換するのには様々な研究がされていますが、
僕は無難にTerminal で、platex→dvipdfmxと入力していました。
でも、これを一回で出来たらいいなあということで、今回はshell目線からやってみました。
bashやzshに以下を追加してください。


function welovepdf () {
# 実行時に指定された引数の数が1個でなければダメです。
if [ $# -ne 1 ]; then
    echo "指定された引数は$#個です。" 1>&2
    echo "実行するには1個の引数が必要です。" 1>&2
else
platex $1
name=$(basename $1 .tex)#拡張子を除いた部分です
dvipdfmx "$name".dvi
fi
}

関数名は、好きなのにしてください。

使い方は、

$ welovepdf paper.tex

です。

楽しんでなー。



2013年6月24日月曜日

ffmpegで色々する


おはようございます。
今回の記事は研究と直接関係無いんですけど、便利なんでみんなに知ってもらおうと思って書きます。
タイトルにある通りffmpegというツールについてのお話です。

ffmpegは情強を自負している人は当然知っているであろうツールで、何ができるかというと動画像、音楽、画像の相互変換やファイル形式の変換が簡単にできるものです。
例えば動画像を連続した静止画やgifアニメーションにしたり、動画像データから音声データを抜き出したり、flvをmp4にしたり、mp3からaacやアップルロスレスへの変換などメディアファイルの変換は大抵なんでもできます。

インストール

ffmpegを使ったGUIソフトはたくさん出まわってますが、そんなものに頼らなくても上述したことはターミナルから出来ます。
インストールはhomebrewやMacPortsを使えば簡単です。
方法は以下などを参考にしてください。
Mac Ports で ffmpegのインストール
Macのhomebrewでffmpegのインストール
インストールしてみると分かりますが、lameなど一緒にたくさんのオープンソースなライブラリがインストールされます。
多分ffmpegは巷で出回っているメディア系のライブラリをオールインワンした感じなんだと思います。

使い方

動画像から音声データの抜き出し

 今mezon.mp4という動画ファイルから最初の3秒目から50秒目までの音声データを抜き出したいとします。
まず、どういう形式のファイルで音声データが格納されているかを知りたいので以下のコマンドを入力します。
ffmpeg -i mezon.mp4
で、これで音声データがmp3で格納されていると分かったとしたら以下のコマンドで抜き出すことができます。
ffmpeg -y -i mezon.mp4 -acodec copy -ss 3 -t 00:00:50 mezon.mp3
-yオプションは出力ファイルが既に存在していたら上書きするということです。
-acodecはここでは元の音声ファイルと同じ形式にしたのでcopyを指定しましたが、libaacなどと指定するとaacで出力できたりします。
-abオプションってのもあって128kとかでビットレートを指定できたりします。

音楽データのファイル形式の変換

今回の記事のメインはメゾンではなくここです。
上述したようにffmpegを使うと音楽ファイルのファイル形式の変換も簡単にできます。
ffmpegではMicrosoftが開発したwma形式にも対応しています。
筆者がまだ学部生だった頃Windowsしか使っておらず、何を思ったか所有している3、400枚ほどのCDを全部wmaで取り込んでしまい、今のメインで使ってるMacではVLCプレーヤーなどを使わないとそれらを再生することができない状況に陥りました。
 iTunesでwmaファイルを読みこんでくれるプラグインがあれば一番良かったのですがそれも見つからず、かといって自分で作るにしてもAPIとか出まわってなさそうなのでそれはあきらめました。
なので持っているwmaファイルを全てiTunesで読み取ってもらえるアップルロスレス形式に変換することを決心しました。

そこでシェルスクリプトの出番です。
ファイル内のサブディレクトリにまで渡って全てのwmaファイルをそれと同じフォルダにアップルロスレスのm4a形式として出力するやり方は以下のようになります。
find . -name "*.wma" | while read FILE
do
    ffmpeg -y -i "$FILE" -acodec alac "${FILE%.wma}.m4a"
done
alacってのがアップルロスレスを指定するオプションです。

が、実はこの方法ではいくつか問題が起きました。
まず、アップルロスレスではファイルサイズがでか過ぎてwmaファイルの20倍くらいになってしまうということです。
全ファイルにやるとwmaだけで40GBくらいあるのにアップルロスレスにすると800GBくらいに膨れ上がるのでウザいです。
なのでmp3の320kbpsでやります。
しかも、ffmpeg一回すると分かるのですが色んな情報が標準出力に出力されて、40GB分とかになると大量のログデータが残ってしまいます。
なのでログとして出力する情報をエラーが起きたときのみに変更します。
さらに、上記の方法では日本語ファイルの変換が何故かうまくいきませんでした。
スペースが存在するのが原因かもしれませんがechoでファイル名表示させるのは上手くいくので、ファイル名が長すぎたりするとダメなのかもしれません。

そこで別の方法を取ります。
xargsというコマンドを使うと、findの引数をいい感じにしてくれるみたいなんでそれを使います。
いい感じというのは、findの結果が大量にあった場合に小出しにして次のコマンドに送ってくれるらしいです。
具体的には以下のコマンドになります。
find . -name "*.wma" -print0 | perl -pe 's/\.wma\0/\0/g' | xargs -0 -I{} ffmpeg -y -i {}.wma -acodec mp3 -ab 320k -loglevel error {}.mp3
perlなんちゃらの部分でファイル名から.wmaを取り除いた文字列を取得してxargsに渡しています。
findの-print0オプションはスペースを含んだファイルも扱えるようにするものでxargsの-0オプションと一緒に使うのが定石っぽいです。
これをさっきのに入れたら良かったのかもしれませんが試してません。
xargsの部分ではwhileループを書く必要がなく、入力文字列を{}に入れてffmpegを実行しています。
ffmpegのオプションは上で説明したものを指定しています。
>> log.txtなどと付け加えるとログをテキストデータで保存できます。

以上長々と便利ツールffmpegの使い方を紹介しましたが、情強の方は多分これくらい余裕なのかもしれませんが自分用の備忘録としても書いておきました。

2012年7月12日木曜日

latexコンパイル用ファイル

bibtexユーザーかつコマンドラインでtexコンパイルしてると,

platex→bibtex→platex→platex→dvipdfmx

のように5回くらいコマンド打たなくちゃいけなくてめんどいと思うので,pdf作成までの作業をひとまとめにしたコマンドファイルを置いときます.
platex&bibtexが置いてあるパスの通ったファルダに配置して,

$ textex test.tex

のようにすると使えると思います.

※使う前に
$ chmod +x textex
ってしてファイル権限を変更したほうがいいです.

2012年1月30日月曜日

bashを利用した簡単コンパイル

ヘッダやライブラリを使ってプログラムを書いていると,
徐々にgccのコマンドが伸びてきて打つのが大変になってきます.
たとえば僕の例だとプログラムフォルダの上に utility/ というフォルダを
作ってそこにヘッダファイルを入れているので,
$ gcc -O3 -o main main.c ../utility/hoge.c ../utility/hugya.c -lfftw3 -g
みたいな感じでいちいち打っていました.長くてめんどくさいですね.
こんなとき,makefileを使うのがひとつの手段としてありますが,他にスクリプトを利用する方法があるので参考程度にご紹介します.
まず適当にc.shという名前のファイルを作ってヘッダと同じフォルダに入れておきます.

#!/bin/sh
gcc -O3 -o $1 $1.c ../utility/hoge.c ../utility/hugya.c -lfftw3 -g

gccの行は自分がいつもコンパイルする時のスタイルで書きます.
$1c.shの引数をあらわしていて,
この場合ターミナル上でプログラムフォルダから,
$ ../utility/c.sh main
みたいな感じで書くとmain.cがコンパイルされて同名のプログラムができます.

これでもまだちょっとコマンドがめんどくさいので,
ここからさらに短くするためにbashの設定ファイルをいじります.
ochiailabの人は,~/emacslib/ の中に dotbashrc ってファイルがあると思うので,
それをemacsかなんかで開いて以下を追記します.

alias c="../utility/c.s"

これはエイリアスといって,ターミナルで入力される文字列(ここでは c )に
"" の中の文字列をあてがっててくれる便利なものです.
これで,ターミナル上でコンパイルしたいプログラムのあるフォルダに移動して,
$ c main
と打ち込むと,これだけでコンパイルできるようになります.

これは自分の今の方法ですが,最近ヘッダがでかくなってきたせいで,
コンパイルに時間がかかるので,分割コンパイルと併用してこうと考えています.

あと,スクリプトを工夫することでmakeっぽく使うことも出来るはずなので,
試してみてできたら書きます.

※蛇足
emacslibにはemacsやターミナル等の設定ファイルが入っているので,
Sugarsyncなんかで同期しとくとどこのPCでも同じ環境が使えて便利です.
このとき異なるPCでコンパイルしようとすると,
ファイル権限の関係で permission denied. と言われることがありますが,
$ chmod a+x c.sh
とすると使えます.