ディレクトリとそのサブディレクトリにあるすべてのファイルの「フル」相対パスのリストを印刷する必要があります。私はこれをduとgrepで行っていました。
du -a <path_to_directory> | grep -Po '[0-9]+\t\/\K.*'
ただし、duは、パスが長すぎる場合、パスの一部をドットで置き換えます。
どちらが良い選択肢ですか?
lsの解析はオプションではありません。
最も簡単なオプションは find
です。
$ cd /usr/lib; find .
.
./libxcb-icccm.so.4.0.0
./libbz2.so.1.0.6
./libdca.so.0
./libxcb-composite.so
./libyajl.so
./libswscale.so
./libxvidcore.so.4.3
./libjasper.so.1
./libdrm_intel.so.1
...
以下のようなフィルタリングのさまざまなテストがあります。
-type
タイプに基づいてフィルタリングする(通常のファイルf
、ディレクトリd
など)-mindepth
および-maxdepth
は、find
が検索する深さを設定します(実際のテストではありません)-name
および-path
は、ファイル名とパスに基づいてフィルタリングし、ワイルドカードをサポートします。-printf
オプションを使用して、さまざまな出力形式を提供します。
シェルと有効なオプションによっては、この目的でグロビングを使用することもできます。たとえば、bash
の場合:
$ shopt -s globstar; printf "%s\n" **
accountsservice
accountsservice/accounts-daemon
aisleriot
aisleriot/ar-cards-renderer
aisleriot/guile
aisleriot/guile/2.0
aisleriot/guile/2.0/accordion.go
aisleriot/guile/2.0/agnes.go
aisleriot/guile/2.0/aisleriot
aisleriot/guile/2.0/aisleriot/api.go
...
そしてzsh
で:
$ printf "%s\n" **/*
accountsservice
accountsservice/accounts-daemon
aisleriot
aisleriot/ar-cards-renderer
aisleriot/guile
aisleriot/guile/2.0
aisleriot/guile/2.0/accordion.go
aisleriot/guile/2.0/agnes.go
aisleriot/guile/2.0/aisleriot
aisleriot/guile/2.0/aisleriot/api.go
...