web-dev-qa-db-ja.com

lsコマンド:ファイルごとに1行のフルパスの再帰的リストを取得する方法を教えてください。

どのようにしてlsに再帰的な1行あたり1つのパスのフラットリストを吐出させることができますか?

たとえば、ファイルのフルパスを含むフラットなリストが必要です。

/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow
/home/dreftymac/stackoverflow/alpha.txt
/home/dreftymac/stackoverflow/bravo.txt
/home/dreftymac/stackoverflow/charlie.txt

ls -a1はほとんど私が必要とすることをします、しかし私はパスフラグメントが欲しくない、私はフルパスが欲しいです。

414
dreftymac

本当にlsを使いたい場合は、awkを使ってその出力をフォーマットしてください。

ls -R /path | awk '
/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print s"/"$0 }'
338
ghostdog74

Findを使う:

find .
find /home/dreftymac

ファイルだけが欲しい場合(ディレクトリ、デバイスなどを省略):

find . -type f
find /home/dreftymac -type f
487
stefanB

ls -ld $(find .)

出力を変更時刻でソートしたい場合は、

ls -ltd $(find .)

69
others

次の簡単な方法を試してください。

find "$PWD"
49
Ivan Alegre

最適なコマンドは次のとおりです。tree -fi

リンクを使用せずにファイルを使用するには、出力から>を削除する必要があります。

tree -fi |grep -v \>

各ファイルの性質を知りたい場合(たとえば、ASCIIファイルのみを読み取る場合)、2つのwhileが必要です。

tree -fi | \
grep -v \> | \
while read first ; do 
    file ${first}
done | \
while read second; do 
    echo ${second} | grep ASCII
done
38
kerkael

ああ、本当にたくさんの答えがあります。それは大いに役立ちました、そして最後に私が探していたものを自分で作成しました:

ディレクトリとそのサブディレクトリ内のすべてのファイルを一覧表示する

find "$PWD" -type f

ディレクトリとそのサブディレクトリ内のすべてのディレクトリを一覧表示するには

find "$PWD" -type d

ディレクトリとそのサブディレクトリ内のすべてのディレクトリとファイルを一覧表示する

find "$PWD"
32
Godfather

フルパスについてはわかりませんが、-Rを再帰に使用できます。あるいは、もしあなたがlsに夢中になっていなければ、find *を実行することができます。

16
Justin Johnson

Ls以外の外部コマンドを使用しないでください。

ls -R1 /path | 
  while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done
14
Idelic
du -a

Find/locateが利用できないいくつかの限られたアプライアンスシェルには便利です。

13
Rob D

トリックを見つける/する

11
Dmitry

フラットリストの場合、最良の方法は次のとおりです。

find -D tree /fullpath/to-dir/ 

(またはテキストファイルに保存するため)

find -D tree /fullpath/to-dir/ > file.txt
9
Dimitrios

複雑にしないでください。これを使用したところ、美しい出力が得られました。

ls -lR /path/I/need
8
KellyC

未来の人々すべてにとって最も簡単な方法は、次のとおりです。

du

ただし、これは各フォルダに含まれるもののサイズも示します。awkを使用してフォルダ名のみを出力できます。

du | awk '{print $2}'

編集 - すみません、すみません。必要なのはフォルダだけだと思いました。いずれにしても将来の誰かがそれを必要とするならば、病気はここにこれを残します...

8
6112115

すべての可能なlsオプションを使用する自由を持つことで:

find -type f | xargs ls -1

7

これはディレクトリ名を示す部分的な答えです。

ls -mR * | sed -n 's/://p'

説明:

ls -mR *は、 ':'で終わる完全なディレクトリ名をリストし、次にそのディレクトリ内のファイルを別々にリストします。

sed -n 's/://p'は、コロンで終わる行を見つけ、コロンを取り除き、その行を印刷する

ディレクトリのリストを繰り返すことで、ディレクトリも見つけることができるはずです。まだそれに取り組んでいます。 xargsを使ってワイルドカードを取得するのは困難です。

6
Kevin

次の形式でbashコマンドを実行します。

find /path -type f -exec ls -l \{\} \;
6
Denio Mariz

Lsディレクトリの末尾にワイルドカードを追加すると、フルパスが強制されます。今、あなたはこれを持っています:

$ ls /home/dreftymac/
foo.txt
bar.txt
stackoverflow
stackoverflow/alpha.txt
stackoverflow/bravo.txt
stackoverflow/charlie.txt

代わりにこれを行うことができます。

$ ls /home/dreftymac/*
/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow:
alpha.txt
bravo.txt
charlie.txt

残念ながらこれは再帰的なディレクトリのフルパスを表示しないので、あなたが探している完全な解決策ではないかもしれません。

5
koeselitz

ls -lRはあなたが探していたもの、または少なくとも私がそうだったものです。乾杯

5
sivi

私が見た答えはたくさんあります。これは私のものです、そしてあなたがMacで作業しているなら、私は非常に役に立つと思います。

"バンドル"ファイル( .app .rtfd .workflow など)があることをご存知でしょう。そしてFinderのウィンドウを見ると、それらは単一のファイルのように見えます。しかしそうではありません。そして$ ls$ findはそれらをディレクトリと見なします...だから、それらの中身もリストする必要がなければ、これは私のために働きます:

find . -not -name ".*" -not -name "." | egrep -v "\.rtfd/|\.app/|\.lpdf/|\.workflow/"

もちろん、これは作業ディレクトリ用で、他のバンドルの拡張機能を追加することもできます(ただし、常にそれらの後に/を付けます)。 /なしでバンドルされていない場合は、他の拡張子も使えます。

かなり興味深い ".lpdf/"(多言語pdf)。通常の ".pdf"拡張子(!!)またはFinderではなしです。こうすればあなたはこのpdfを手に入れることができます。

4
Steve

ディレクトリが相対パスとして渡され、findを呼び出す前にそれを絶対パスに変換する必要があるでしょう。次の例では、ディレクトリがスクリプトの最初のパラメータとして渡されます。

#!/bin/bash

# get absolute path
directory=`cd $1; pwd`
# print out list of files and directories
find $directory
3
John Keyes
tar cf - $PWD|tar tvf -             

これは遅いですが再帰的に動作し、ディレクトリとファイルの両方を表示します。他のすべてのinfo /ディレクトリを使わずにファイル名だけが必要な場合は、awk/grepでパイプ処理できます。

tar cf - $PWD|tar tvf -|awk '{print $6}'|grep -v "/$"          
3
RuleB

@ ghostdog74:あなたの解決策を少し微調整してください。
ファイルを絶対パスで検索するには、次のコードを使用します。

Sudo ls -R / | awk '<br/>
/:$/&&f{s=$0;f=0}<br/>
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}<br/>
NF&&f{ print s"/"$0 }' | grep [file_to_search]
2
Chaitanya

ファイル名はわかっていましたが、ディレクトリも必要でした。

pWDを見つけるfgrepファイル名

mac OS 10.12.1で完璧に機能しました

1
hpj