Posts Tagged ‘shell’

あるディレクトリの中のディレクトリ群を、全て個別のzipアーカイブにしたいと思った。

そこで

for i in `ls`; do zip -r $i.zip $i; done;

というコードを書いて実行したところ、すべてのディレクトリの中に「.zip」というファイルが出来上がってしまった。

いやいや、もう一つ上のディレクトリに、個別のディレクトリと個別のディレクトリのzipアーカイブが並んでほしかったのだけど。

何がおかしいのだろうと思って

for i in `ls` ; echo $i.zip

を実行したところ


dir1/.zip
dir2/.zip

という結果が出てきた。

つまり、ディレクトリをあらわす記号"/"の後に.zipがついていたわけです。
なるほど、自分のzshはディレクトリの名前をタイプするだけでそのディレクトリの中に入るような仕様にカスタムしているので、

cd dir1

をしていることと同様になり、その後.zipを作っているということになっていたわけです。

ということでディレクトリの末尾のスラッシュを消す方法を探したところ、以下のコマンドで達成できました。

for i in `ls` ; echo ${i%/}.zip

${i%/} %/を変数に対して付加してあげると、末尾のスラッシュを取り除いてくれるようです。

これは例えばスラッシュでなくても、i%#とすれば末尾のシャープを取り除いてくれるようですね。

結果、以下のコードを実行することで思っていたことが出来ました。

for i in `ls` ; do zip -r ${i%/}.zip $i; done;

勉強になりました。

684px-GNU_Screen

SSHを使ったUnix系シェルの操作時に、GNU-Screenを使ってターミナルの拡張をしている人は多いと思う。
Screenを使い始めの頃、シェルのログイン時にscreen -rdで以前のセッションを引っ張って来る方法を採っていた。
しかし、この方法だとセッションが存在しない場合に生成されない。

当時、screenがない場合は新しいセッション作って、既に在る場合はscreen -rdしたいなと思って、
大げさにもシェルスクリプトを組んだのはアホな思い出・・・。
そして結局その必要はなく、.profile(システムログイン時に実行されるバッチ処理)に

screen -d -RR

と書くだけで事足りてしまった。

これによって私のLinuxライフが格段に快適になった事は言うまでもない。
会社でサーバーにログインして作業して、家に帰ってサーバーにログインすれば作業中の内容をすぐに復元できる。
普段何気なく使っているが、これって実はとても凄い事だと思う。

man引用

-d -RR セッションを再アタッチする。必要ならばまずデタッチするか、
あるいはセッションを生成する。 複数のセッションをアタッチ可能な場合は、最初のセッションを使う。

車輪の再開発って奴でしたネ。