373

ファイル パスを入力として受け取るシェル スクリプトを作成しています。

このため、フル パスを使用して再帰的なファイル リストを生成する必要があります。たとえば、ファイルbarのパスは次のとおりです。

/home/ken/foo/bar

しかし、私が見る限り、両方ともls相対findパスのリストのみを提供します:

./foo/bar   (from the folder ken)

これは明らかな要件のように思えますが、findまたはlsman ページには何も表示されません。

絶対パスを含むシェル内のファイルのリストを生成するにはどうすればよいですか?

4

26 に答える 26

366

最初に絶対パスをfind指定すると、絶対パスが出力されます。たとえば、現在のディレクトリにあるすべての .htaccess ファイルを検索するには:

find "$(pwd)" -name .htaccess

または、シェル$PWDが現在のディレクトリに展開する場合:

find "$PWD" -name .htaccess

find指定されたパスを、そのパスからのファイルへの相対パスに追加するだけです。

Greg Hewgillpwd -Pは、現在のディレクトリでシンボリック リンクを解決する場合に使用することも提案しました。

于 2008-10-29T09:26:35.093 に答える
219
readlink -f filename 

完全な絶対パスを示します。ただし、ファイルがシンボリックリンクの場合は、最終的に解決された名前を取得します。

于 2011-01-02T04:45:05.827 に答える
156

これをdirsに使用します(bashでディレクトリに制限するために/afterが必要です):**

ls -d -1 "$PWD/"**/

これは、現在のディレクトリの直下にあるファイルとディレクトリで、名前に.:

ls -d -1 "$PWD/"*.*

これはすべてのために:

ls -d -1 "$PWD/"**/*

ここから取得 http://www.zsh.org/mla/users/2002/msg00033.html

bash では、**有効にすると再帰的になりますshopt -s globstar

于 2010-08-26T06:42:48.097 に答える
47

使用できます

find $PWD 

バッシュで

于 2008-10-29T09:27:50.117 に答える
32
ls -d "$PWD/"*

これは、現在のディレクトリのみを検索します。スペースが含まれている場合は、「$PWD」を引用符で囲みます。

于 2009-09-15T13:15:50.210 に答える
8

上記の$PWDMatthewによる良いオプションです。ファイルのみを印刷する検索が必要な場合は、-type fオプションを追加して、通常のファイルのみを検索することもできます。他のオプションは、ディレクトリのみの「d」などです。したがって、あなたの場合は次のようになります(.c extを持つファイルのみを検索する場合):

find $PWD -type f -name "*.c" 

または、すべてのファイルが必要な場合:

find $PWD -type f

注:エイリアスがbashによって設定されている場合、$ PWDはホームディレクトリに自動補完されるため、上記のコマンドのエイリアスを作成することはできません。

于 2011-08-09T17:27:44.460 に答える
8

findコマンドに絶対パスを指定すると、結果が絶対パスで出力されます。したがって、次のように入力すると、Kenディレクトリから次のようになります。

find /home/ken/foo/ -name bar -print    

(相対パスの代わりにfind . -name bar -print

あなたは得るべきです:

/home/ken/foo/bar

したがって、が必要ls -lで絶対パスを返すようにする場合は、findコマンドに、見つかったものすべてに対してを実行するように指示するだけls -lです。

find /home/ken/foo -name bar -exec ls -l {} ;\ 

注:との間にスペースが{}あります;

次のようなものが表示されます。

-rw-r--r--   1 ken admin       181 Jan 27 15:49 /home/ken/foo/bar

ファイルの場所がわからない場合は、いつでも検索場所を変更できます。検索パスが「/」で始まる限り、代わりに絶対パスを取得します。多くの許可拒否エラーが発生する場所(/など)を検索している場合は、実際に検索結果を確認できるように、標準エラーをリダイレクトすることをお勧めします。

find / -name bar -exec ls -l {} ;\ 2> /dev/null

2>はBorneシェルとBashシェルの構文ですが、Cシェルでは機能しません。他のシェルでも機能する可能性がありますが、BourneとBashで機能することは確かです)。

于 2010-01-29T13:43:55.030 に答える
5

fd

fd(の代わりに) を使用findして、次の構文を使用します。

fd . foo -a

は検索.パターンで、fooはルート ディレクトリです。

たとえば、すべてのファイルをetc再帰的に一覧表示するには、次を実行しますfd . /etc -a

-a--absolute-path 相対パスではなく絶対パスを表示

于 2019-10-24T11:51:44.410 に答える
1
lspwd() { for i in $@; do ls -d -1 $PWD/$i; done }
于 2011-03-31T00:08:33.630 に答える
1

これを試してみてください。

for name in /home/ken/foo/bar/*
do
    echo $name
done

forloop を使用して abs パスを取得できechoますfind

于 2020-03-09T08:38:35.533 に答える
-1
ls -1 | awk  -vpath=$PWD/ '{print path$1}'
于 2010-06-23T20:37:26.000 に答える
-1

find / -printこれをします

于 2008-10-29T09:26:47.713 に答える