Hatena::Groupcside

Cside::StudyMemo このページをアンテナに追加 RSSフィード

メインブログに書くまでもない自分用メモを垂れ流す。日々是勉強也。

カテゴリー

2012-05-10

[][]あるディレクトリ以下のファイルをタイムスタンプでソート

find の -mtime オプション、自分の環境ではうまく動かなかったので取り急ぎこうした。やり方が悪かったのかもしれない。

$ ls -lt `find . -type f`

2012-03-11

[]zshの **

.
└── dir1
    ├── dir2
    │   ├── dir3
    │   │   └── in_dir3.txt
    │   └── in_dir2.txt
    └── in_dir1.txt

こういうディレクトリがあったとして

$ ls -1  */*.txt
dir1/in_dir1.txt
ls -1 **/*.txt
dir1/dir2/dir3/in_dir3.txt
dir1/dir2/in_dir2.txt
dir1/in_dir1.txt

たぶんzsh使う人には当たり前なんだろうけど知らんかったよ…。。。


See Also

The CPAN Search Site - search.cpan.org

2011-09-03

[]grep、find、xargs

grep

-vパターンに一致しない行を表示する
-e複数個のパターンを指定するときに使う
OR検索
ls | grep -e "aomori" -e "yamanashi"
grep "aomori\|yamanashi" fruits.txt
AND検索
ls | grep "yamanashi" | grep "peach"
example
svn st -u | grep -e 'pm$' -e 'conf$' | grep -v -e 'IgnoreCase' -e '_'

更新のあるファイルから、pmかconfで終わるファイルを表示。ただしIgnoreCaseか_にマッチするものは除く。

find

-maxdepthディレクトリの深さを指定して検索する。n=0ならサブディレクトリは検索しない
-mtime [+-]nファイルの最終更新日付がn日前なら真。(+nの場合:n日より大きい。-nの場合:n日より小さい)

xargs

findやlsとセットで使うことが多い気がする。

-Lコマンド1回の実行にいくつの引数を(最大で)与えるか
examples
find /path/to/dir -mtime '-2' -type f | xargs chmod 644

/path/to/dir配下の2日以内に更新されたファイルを一括で chmod 644 する

ls | grep -v foo | xargs svn up

fooにマッチしないすべてのファイルをsvn up

find -name '._*' | xargs svn rm

ファイル名が ._ で始まるものを svn rm

find . -type d -print0 | xargs -0 chmod go+rx

カレントディレクトリ配下のディレクトリを一括で chmod go+rx

cat foo.txt | head -100 | xargs -L 50 -P 2 perl -e 'print "start!\n"; sleep(1); print scalar(@ARGV),"\n";'
  #=> start! start! 50 50

-Pオプションで並列処理もできる

注意点

Macでfindとxargsをパイプで繋いで使うなら -print0 と -0 を必ず使う。これはMacではディレクトリ名に0x20(空白)が入るため。

findの-print0は、区切り文字を0x00(ヌル)*1で出力。xargsの-0は、通常は空白の所をヌル文字を区切り文字として受けるようにする。

yuku_tyuku_t2011/09/03 14:47vim -p `grep -l *****`
でgrepにマッチしたファイルをvimで一括オープンできて便利。-pは一つ一つのファイルをタブで分けて開くためのオプション

CsideCside2011/09/03 14:51お、ありがとうございます。Vimのタブって使ったことなかったんですけど、一括オープンできるなら試す価値ありそうですね。

2011-02-15

[]Mac as Unix

部屋を掃除して出てきたこの本を久しぶりに読み返してみた。知らなかったコマンドなどをメモ。

けっこう知らないのあった。やっぱ本は読まなきゃダメね。

Mac OS X v 10.5 Leopard as UNIX

Mac OS X v 10.5 Leopard as UNIX

Spotlight検索

findとかlocateよりだいぶ早い。Finderで使われてるやつもこれ?

# キーワード検索
$ mdfind "word"
# 検索対象を指定
$ mdfind -onlyin /path/to/dir "word"
# メタデータ
$ mdls test.pl

kMDItemContentCreationDate     = 2011-02-13 22:12:53 +0900
kMDItemContentModificationDate = 2011-02-13 22:12:53 +0900
kMDItemContentType             = "public.perl-script"
kMDItemContentTypeTree         = (
    "public.perl-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDisplayName             = "tet.pl"
kMDItemFSContentChangeDate     = 2011-02-13 22:12:53 +0900
kMDItemFSCreationDate          = 2011-02-13 22:12:53 +0900
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "tet.pl"
kMDItemFSNodeCount             = 0
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 1592
kMDItemFSTypeCode              = ""
kMDItemKind                    = "Perl source"
kMDItemLastUsedDate            = 2011-02-13 22:12:53 +0900
kMDItemUsedDates               = (
    "2011-02-13 00:00:00 +0900"
)
# 属性を個別に表示
$ mdls -name kMDItemFSname test.pl
# メタデータで検索
$ mdfind -onlyin /path/to/dir "attr == 'finename*'"  # 論理演算子も使える