なっく日報

技術やら生活やらのメモ

コマンド出力結果にcdして何かするワンライナー

動機

とあるコマンドで標準出力されたディレクトリに1個1個cdしてコマンドを打つ

みたいなことを(できればワンライナーで)やりたい。

最初に思いついた案

ls dir | xargs -n 1 cd && pwd

※実際打ったコマンドはls dirではない

な感じでxargs + cdはできないようでした。(cdがbuiltinコマンドのせい?)

自分で考えた案

こうするのが良さそう。

for d in $(ls dir); do cd $d && pwd; done

※実際打ったコマンドはls dirではない(二回目)

とあるサイトに素晴らしい答えが

askubuntu.com を見ました。

# ベストアンサー。すげぇ・・・
printf '"%s"\n' */ | xargs -L 1 bash -c 'cd "$1" && pwd' _

# find使うと楽だよという例。今回は使えないのですが、一応参考程度に。
find . -type d -execdir pwd \;