lsコマンドでディレクトリのみを一覧で表示
こんな状態から
Directory1 Directory2 Directory3 Directory4 Directory5 sample1.apk sample2.apk sample3.apk
ディレクトリのみ一覧で表示したい場合
ターミナルに以下をぶちこむ
ls -1F | grep /
表示結果
Directory1/ Directory2/ Directory3/ Directory4/ Directory5/
lsオプション説明
-1
1行に1ファイルずつ表示する
-F
ファイル名にファイル・タイプを表す記号を付けて表示する。ディレクトリは"/",実行可能ファイルは"*",シンボリック・リンクは"@",FIFOは"|",ソケットは"="で表わす
最後のスラッシュが邪魔だけど...
もっと良い方法ないですかね
Xmllintで属性を指定してXmlから値を取得
またまたシェルスクリプトとxmllintを使う機会があった。
今度はxmlに同名タグが複数存在しており、属性で絞って値を取るというパターンだった。
やりたいこと
以下のxmlがあったとする。
<!-- sample.xml --> <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <long name="aaa" value="12345" >いぬ</long> <long name="bbb" value="56789" >ねこ</long> </map>
longタグ内にあるname="aaa"のvalueの値「12345」を取得したい。
前回と同じくxmllintを使って取得する。
準備&おさらい
準備&おさらいとして、単にvalueのみを指定してxmllintで取る。
echo 'cat map/long/@value' | xmllint --shell sample.xml
結果はこうなる
/ > cat map/long/@value ------- value="12345" ------- value="56789"
name="aaa"もname="bbb"の両方のvalueがヒットしてしまう。
これを条件を与えて絞るようにする。
xmllintに条件を加える
name=aaaのみを得るには、long[@name="aaa"]
とする。
echo 'cat map/long[@name="aaa"]/@value' | xmllint --shell sample.xml
とすると、結果はこうなる。
/ > cat map/long[@name="aaa"]/@value ------- value="12345"
無事にname=aaaのみのvalueが取れた。
できた
あとは変数だけを取得するなら、自分はこうしてみた
value=`echo 'cat map/long[@name="aaa"]/@value' | xmllint --shell sample.xml |grep value= | sed 's/[^"]*"\([^"]*\)"[^"]*/\1/g'` echo $value
結果はこうなる。
1234
これで目標達成となった。
<br
おまけ
「いぬ」の値を取る場合はこうした。
value=`echo 'cat map/long[@name="aaa"]' | xmllint --shell sample.xml | grep value= | sed 's/^.*<long.*>\(.*\)<\/long>.*$/\1/'`; echo $value
結果はこうなる。
いぬ
参考リンク
- Test XML command line with xmllint | - Softwaretester -
ShellScriptとxmllintでxmlを解析
ShellScriptド素人がxmlの中身を取り出したかったので、色々調べた
xmllintとは
xmllintとはlibxml2を使用したツールで、XMLファイルに対して以下の機能を持ったのコマンドラインツールです。
このxmllintを使って、以下のxmlを解析して値&属性値を取り出す
sample.xml <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <top> <int name="hoge" value="327">100</int> </top>
327を取り出す場合、以下のようにする
echo 'cat /top/int/@value' | xmllint --shell sample.xml | grep value= | sed 's/[^"]*"\([^"]*\)"[^"]*/\1/g'
100を取り出す場合、以下のようにする
echo 'cat /top/int' | xmllint --shell sample.xml | grep value= | sed 's/^.*<int.*>\(.*\)<\/int>.*$/\1/'
参考にしたサイト
* ShellScriptでXMLの内容を取り出す | Opentone Labs.
* sedで「ダブルクォーテーションに囲まれた文字列」を抽出する方… - 人力検索はてな
adbでスクリーンショットをファイル名+年月日付きで出力する
.bashrcに以下を追加する
export ANDROID_SDK=AndrodSDKのパス alias sshot=$ANDROID_SDK"/tools/screenshot2 ~/screenshot.png; mv ~/screenshot.png ~/screenshot_`date '+%y%m%d%H%M%S'`.png"; # screenshot_160322141020.pngと出力される
保存するパスは自分で好きなように設定するべし
dose not contain the JNI_CreateJavaVM symbol
ついにMacBookProをEl Capitanにアプデした後、Aptana Studioを起動してみると
"/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/../jre/lib/server/libjvm.dylib" does not contain the JNI_CreateJavaVM symbol.
というエラーダイアログが出て起動しなかった。
OMG!とビビりつつググると
下のリンクからJava for OS X 2015-001をインストールしなさい、とのこと
ダウンロード - Java for OS X 2015-001
あれー、これ前に入れたことあったような...
と思いつつインストールすると、あっさりとAptana Studioが起動
めでたしめでたし
Adblock FastはNexus6に効果がなかった
広告が邪魔なのでブロックできるアプリを探していると、こんなの見つけた play.google.com
Adblock Fast
なんか良さげ!
何も考えずNexus6に入れてみる
うーん、広告がブロックされている気配がない...
アプリの説明を読んでみると
The app requires and blocks ads in Samsung Internet 4.0 and up (not in other apps). After installing, follow the in-app instructions to turn ad blocking on.
Samsung Internetというアプリにしか効果がないようだ…
入れた意味なかった…
ちゃんと説明を読まない俺がダメなんですけどね
Samsung Internetとは
そのSamsung Internetとは何だろう?と調べると
サムスン端末じゃないとインストールできないっぽい
俺は無駄な時間を過ごしたのか
結局、広告はブロックできず、
効果のないアプリをインストールしては調べ、
読者は無駄な時間を費やしてしまったのか
いや、そうではない
収穫はあったのだ
あなたが開発者ならね
なーんと、Adblock Fastのアプリ説明にgithubのリポジトリが載っていて、ソースが見れるじゃありませんか!
GitHub - rocketshipapps/adblockfast: A new, faster ad blocker for Android, iOS, Chrome, and Opera.
広告をブロックする処理がどうなっているのか、勉強になりそう!
(俺は読んでないけど)
こうして、会社の昼休みが終わっていくのであった