Diary

Diary

日々学んだことをアウトプットする場として初めてみました

ls で特定の拡張子のみを表示する

やりたいこと

wget -r で自分が公開しているサイトの全データをダウンロードしたのだが、その中から写真のみを相対パスピックアップしたい。

構造の例

.
| -- hoge
|      | -- hoge.html
|      | -- hoge.png
|      | -- hoge2.png
| -- foo
|      | -- foo.png
|      | -- foo.html
| -- test.png

特定のディレクトリ内での特定の拡張子を選ぶ

ls *.png

とすることで、test.png は取得できる

再帰的にtreeを下っていって検索したい

ls -R

とやると全てのディレクトリを調べてくれるとのことだが、

ls -R *.png
> ls: cannot access '*.png': No such file or directory

と怒られてしまった。

ls -R をパイプで繋ぐ

そこで、他のコマンドを使って加工してやることにした

とりあえずgrep

ls -R | grep .png
> hoge.png
> hoge2.png
> foo.png

これだと、ファイル名しか表示されないらしい。

今欲しいのは相対パスなので、もう一回 ls -R を眺めてみる

ls -R
> .:
> foo hoge  test.png
>
> ./foo:
> foo.html  foo.png
> ./hoge:
> hoge.html  hoge.png  hoge2.png

どうやら、ファイル名の上にディレクトリ名が表示されてるらしい。

ここからawk 使ったらいけるじゃんと思い、格闘を続けること30分

あとは、find で探してあげるだけ

ls -R | grep .png | xargs -I@ find . -name @

PS:

find -name *.png

でいいじゃん