次のような状況があるとしましょう。
$ find ./src -name '*.txt'
./src/file1.txt
./src/subdir1/file2.txt
./src/subdir1/subsubdir1/file3.txt
./src/subdir2/file4.txt
検索しているディレクトリを除外したいと思います。次のようになります。
./file1.txt
./src/file1.txt
./subdir1/file2.txt
待つ代わりに./src/subdir1/file2.txt
。
追加しても-mindepth 1
効果はありません。
私が欲しいものを純粋にできますかfind
?
答え1
find
サポートされているバージョンがない場合は、この-printf '%P'
代替構成を使用して検索パスを含めないでください。
問題の始点:
find ./src -name '*.txt'
同じですが、結果に検索パスはありません。
( cd ./src && find . -name '*.txt' )
あなたの質問に示されているファイル構造を仮定すると、結果は次のようになります。
./file1.txt
./subdir1/file2.txt
./subdir1/subsubdir1/file3.txt
./subdir2/file4.txt
答え2
延長対象@steeldriverさんが言った。:
$ cd "$(mktemp --directory)" # create temporary directory
direnv: unloading
$ mkdir foo bar
$ touch foo/1 bar/2
$ find foo bar -type f -name '*' -printf '%P\n'
1
2
GNUマニュアルは%P
フォーマット文字列を次のように記録しますfind
。
%P
ファイル名とファイルが見つかった元の名前が削除されました。
ここで、「ファイル名」は単にファイル名ではなく、見つかったファイルのパス名を意味します。