Posts Tagged ‘bash’

あるディレクトリの中のディレクトリ群を、全て個別の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;

勉強になりました。

python-logo-master-v3-TM

先日Linux上でPythonのプログラムを開発していた時にディレクトリの中の画像ファイル一覧を取得したいなあと思う事がありました。

ディレクトリの中にはテキストファイルや、csvファイルが同時に含まれていたのですが、画像ファイルの一覧だけをリスト化したいなあと。

という事でどうやって解決したのかをここに記して置こうと思います。

import commands
jpgList = []
jpgList =  commands.getoutput("ls targetPath | grep *.jpg").split("\n")

osモジュールのlistdir()メソッドとかでもディレクトリとファイルの参照が出来るようですが、使い慣れたbashの出力をそのままゲット出来るcommands.getoutput()メソッドの方が便利だなと私は感じました。

このメソッドに文字列を渡すとカレントディレクトリでシェルコマンドを実行、返り値を取得する事ができます。

次のsplit()メソッドがキモなのですが、lsの返り値は"\n"で区切られています。

適当なファイルのあるディレクトリ内で

ls > result.txt
less result.txt

とやってみれば改行がIFS(内部フィールド区切り文字 (Internal Field Separator))となっている事が分かると思います。

よって、split("\n")で改行によって分割、リスト化してあげればlsの返り値を簡単にリスト化する事が出来るというワケです。

読者諸兄におかれましては蛇足となりましょうが、 "| grep *.jpg" によってファイル末尾(拡張子)が".jpg"のファイル群のみをリストアップするようにする事でjpgファイルらのみをリスト化しております。