📝

ls -Rでフルパスを取得

2023/08/29に公開

https://qiita.com/items/277df524d57ce111fcd3


お詫び

Qiitaの元記事にて、区切り線を「---」で書いている場所があり、これがZennの記法に干渉して一部うまく表示できない記事がある事を認識しています。
全ての記事を精査しきれていないため、お手数ですがお見かけの際は教えていただけると大変喜びます。


あってもおかしくないのに、見当たらなかったので。
私の探し方がまずかったのかな…?
念のため、備忘録おいときます。

find -ls -maxdepth (n)

一番手っ取り早いのはこれ。
とはいえ、ls -Rの出力形式のようにしたい場合はfindは邪魔になります。
力技でいい感じにするというのも手ではありますが、今回はlsにこだわります。

キーポイント

ターミナルでpwdを打つ機会は多いと思いますが、$PWDで自分の場所がフルパスで取れます。
$(PWD)でもPWDでも同じです。

これを使って、今いる場所(./)をフルパスに置き換える、というのが目的です。
仕組み自体はそんな難しくないです。

fullls.sh
#!/bin/sh
nowDir=$PWD

cd $(dirname "lsで取りたいディレクトリ")
ls -R $PWD

cd ${nowDir}

これだけです。とても簡単!
nowDirしているのは、lsした後で今いる場所に戻ってくることがあるかも知れないので、念のため入れてます。

気をつけてほしいのが、nowDirでsh実行をする想定でteeとかしたい場合は以下のようにします。

tee.sh
#!/bin/sh

# shファイルのフルパスをthisに持っておく
cd $(dirname ${0})
this=$(PWD)

...
ls -R $PWD | tee ${this}/tee.txt

これでどこに移動しても一意の場所を設定できます。
結構落とし穴なので、出力先の設定も絶対パスにするようにしましょう。
逆に、相対パスで都合がいい場合はこの限りではありませんが、運用に気をつけてください。

GitHubで編集を提案

Discussion