LSはコマンド:私は、ファイルごとに、1行をリスト再帰フルパスを取得できますか?
-
21-09-2019 - |
質問
どのように?LSは再帰ごとに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
はほとんど何が必要ありませんが、私はパスの断片を望んでいない、私は完全なパスをしたい。
解決
あなたが本当にls
を使用する場合は、その出力使用のawkをフォーマットします:
ls -R /path | awk '
/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print s"/"$0 }'
他のヒント
使用検索:
find .
find /home/dreftymac
あなたはファイルのみ(オミットディレクトリ、デバイスなど)をしたい場合:
find . -type f
find /home/dreftymac -type f
ls -ld $(find .)
あなたは修正時間によって、あなたの出力をソートする場合:
ls -ltd $(find .)
以下の簡単な方法を試してみてください
find "$PWD"
ベストコマンドは次のとおりです。tree -fi
ファイルではなく、リンクを使用するためには、あなたは出力から>
を削除する必要があります:
tree -fi |grep -v \>
あなたは、各ファイルの性質を知りたい場合は、、2 while
sで(例えばASCIIファイルだけを読むために):
tree -fi | \
grep -v \> | \
while read first ; do
file ${first}
done | \
while read second; do
echo ${second} | grep ASCII
done
ああ、本当に回答の長いリスト。 それは多くのことを助け、最終的に、私は私が探していた自分を作成します:
にすべてのディレクトリとそのサブディレクトリ内のファイル:
find "$PWD" -type f
にすべてのディレクトリとそのサブディレクトリ内のディレクトリ:
find "$PWD" -type d
にすべてのディレクトリとそのサブディレクトリ内のディレクトリとファイルます:
find "$PWD"
私は完全なパスを知らないが、あなたは再帰を-R
を使用することができます。また、あなたがls
に曲がっていないのであれば、あなただけのfind *
を行うことができます。
LS以外の外部コマンドを使用していない。
ls -R1 /path |
while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done
du -a
検索/見つけ、いくつかの制限されたアプライアンスシェルのハンディは使用できません。
検索/トリックを行います。
私はフラットなリストについて考える最良の方法は次のとおりです。
find -D tree /fullpath/to-dir/
(またはtxtファイルに保存するために)
find -D tree /fullpath/to-dir/ > file.txt
それは複雑にしないでください。私はこれを使用して美しい出力を得ます:
ls -lR /path/I/need
は、すべてのあなたの未来の人々のための最も簡単な方法は、単純です:
du
このしかし、また、各フォルダに含まれるいただきました!の大きさを示しています あなたは出力のみのフォルダ名にawkを使用することができます:
du | awk '{print $2}'
編集 - 申し訳ありません申し訳ありませんが、私の悪いです。私はそれが必要とされたフォルダのみだと思いました。 病気ここにこれを残す場合は、将来のニーズの誰もとにかく...
find -type f | xargs ls -1
次のフォーマットでbashコマンドを実行します:
find /path -type f -exec ls -l \{\} \;
ここでディレクトリ名を示す部分答えがあります。
ls -mR * | sed -n 's/://p'
説明:
ls -mR *
リストで終わる完全なディレクトリ名「:」、その後、別途
結腸内端部は、結腸を取り除き、線を印刷することsed -n 's/://p'
の発見線
はディレクトリのリストを反復処理することで、我々としても、ディレクトリを見つけることができるはずです。まだそれに働い。 xargsの通過ワイルドカードを取得するための課題となっています。
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
それはあなたが探している完全な解決策ではないかもしれないので、残念ながら、これは、ディレクトリのフルパスに再帰印刷されません。
ls -lR
は、あなたが探していた、または少なくとも私が何であったかです。歓声
私が見答えがたくさん。これは私のものです、そしてあなたがMac上で作業している場合、私は非常に便利だと思います。
私はあなたには、いくつかの "バンドル" ファイルがある知っていると確信している(の.APP の、の.rtfd の、の.workflow の、など)。そして、Finderのウィンドウを見て、彼らは、単一のファイルに見えます。しかし、そうではありません。そして$ ls
または$ find
ディレクトリとしてそれらを参照してください...だからを、あなたが同様にその内容を一覧表示する必要がない限り、私にとってこれは作品ます:
find . -not -name ".*" -not -name "." | egrep -v "\.rtfd/|\.app/|\.lpdf/|\.workflow/"
もちろんこれは、作業ディレクトリのためである、とあなたは(それらの後いつも/
付き)他のバンドル伸長を追加することができます。または/
なしの拡張子でない場合は、バンドルの他ます。
むしろ ".lpdf/
"(多言語pdf)を面白いです。これは、Finderで、通常の ".pdf
" 拡張子(!!)、またはnoneを持っています。このpdf
ない原料の束のためにあなたが得る(またはそれだけで1つのファイルをカウント)この方法で...
ディレクトリが相対パスとして渡され、あなたが検索を呼び出す前に、絶対パスに変換する必要があります場合。次の例では、ディレクトリは、スクリプトの最初のパラメータとして渡されます:
#!/bin/bash
# get absolute path
directory=`cd $1; pwd`
# print out list of files and directories
find $directory
tar cf - $PWD|tar tvf -
これは遅いですが、再帰的に動作し、ディレクトリとファイルの両方を出力します。あなたができるのawk / grepのあなただけの他のすべての情報/ディレクトリのないファイル名をしたい場合とのパイプをます:
tar cf - $PWD|tar tvf -|awk '{print $6}'|grep -v "/$"
@ 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]
私は、ファイル名を知っていたが、同様にディレクトリを望んでいます。
$ PWDを見つけます| fgrepは、ファイル名
Mac OSの10.12.1で完全に働いた。