ディレクトリに関連する「検索」出力


34

操作のfind特定のルートにあるすべてのファイルとディレクトリを再帰的に一覧表示するために使用したいと思いますcpio。ただし、ルートディレクトリ自体がパスに表示されないようにします。たとえば、私は現在以下を取得しています:

$ find diskimg
diskimg
diskimg/file1
diskimg/dir1
diskimg/dir1/file2

しかし、私は取得したい

file1
dir1
dir1/file2

(ルートは目的の出力にもありませんが、で簡単に削除できますtail)。

私はOS Xを使用していますが、作成中のスクリプトを他のOS Xユーザーと共有したいので、可能であれば追加のツール(GNU findなど)をインストールしないことを望みます。

cutルートリストを削除するためにこれを行うことができることを知っていますが、それは次善の解決策のようです。より良い解決策はありますか?


find diskimg/* | cut -d '/' -f2-
nik.shornikov

回答:


18

あなたがやろうとしていることが複雑すぎない場合は、sedでこれを達成できます:

find diskimg | sed -n 's|^diskimg/||p'

またはcut

find diskimg | cut -sd / -f 2-

(ほとんど)コマンドの区切り文字を選択できます:(find diskimg | grep -v '^diskimg$' | sed -e 's|^diskimg/||'注:「-e」も追加しました。また^、良いプラクティス(ここでは必要ありません。すべての行にこれがありますが... 、いくつかのCPUを節約します;))
オリビエデュラック

grepをせずに別の方法: find diskimg | sed -e 's|^diskimg/*||' (「/ *」「/」の任意の数でも0と一致します)
オリヴィエ・デュラック

このcutコマンドは、私が使用したものよりも簡潔です。私はそれが好きです。(sed解決策も素晴らしいですが、の繰り返しdiskimg/は少し残念です)。
nneonneo

29

cd 最初にディレクトリに:

cd diskimg && find . 

完了すると、ルートディレクトリに戻ります。

この場合、ファイルの先頭に./が追加されます。私が周りで見る唯一の方法は、使用することcutです:

{ cd diskimg && find .; } | tail -n +2 | cut -c 3-

サブシェルを使用して、シェルの現在のディレクトリを変更しないようにします(パイプの左側がすでにサブシェルで実行されているため、出力をパイピングする場合は必要ありません)。

(cd diskimg && find .)

5
完了時に元のディレクトリに戻るには:括弧を追加します(cd diskimg && find . ; )。その方法はcd diskimg && find .サブシェルで行われます:そのサブシェルが終了すると、あなたがいたディレクトリにあるあなた自身のシェルに戻ります。
オリビエデュラック

1
find *役に立たないプレフィックスを回避する別の方法
-nik.shornikov

23

別の、より複雑ですが、他の答えから検索アプローチを使用するだけです:

find diskimg -mindepth 1 -printf '%P\n'

すべてのバージョンのfindサポートprintf
ヨルダン

1
確かに; 私のOSXはそうではないようです。別のソリューションを提供した理由もあります。
ステファン

2
@Stephan-次回は、これらのタイプの回答を1つにまとめることができます。このような変動に対して複数の回答をする必要はありません。
slm

2
GNUのみがfindサポートされていますが-printf、多くのBSD findはGNUの機能の一部をコピーしていますがfind-printfまだコピーされていません(AFAIK)。
ステファンシャゼル

%P相対パスについては、私は必要なものでした。
Fl0v0

4

realpathユーティリティを使用します。

find diskimg -exec realpath --relative-to diskimg {} \;

きちんと-見せてくれてありがとう--relative-to
nneonneo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.