質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

2回答

875閲覧

"find DIR -print0 -type f"の出力にDIRが(検索されたファイルのパスとしてではなく)含まれてしまう

rasum

総合スコア21

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2021/12/29 04:52

"find DIR -print0"の結果の先頭に検索ディレクトリDIRが付加されます。
findコマンドの中でこれを無くす方法がありますでしょうか?


(例)

出力したいファイルの確認

$ find tmp/ -type f tmp/myfile2 tmp/myfile1

 
-print0オプションでの出力状況

$ find tmp/ -print0 -type f tmp/tmp/myfile2tmp/myfile1

 
sedを使う?

$ find tmp/ -print0 -type f | sed s%tmp/%% tmp/myfile2tmp/myfile1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

sh

1$ find tmp/ -type f 2tmp/myfile1 3tmp/myfile2 4 5$ find tmp/ -print0 -type f 6tmp/tmp/myfile1tmp/myfile2 7 8$ find tmp/ -type f -print0 9tmp/myfile1tmp/myfile2 10 11$ find --version 12find (GNU findutils) 4.7.0 13Copyright (C) 2019 Free Software Foundation, Inc. 14License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. 15This is free software: you are free to change and redistribute it. 16There is NO WARRANTY, to the extent permitted by law. 17 18Written by Eric B. Decker, James Youngman, and Kevin Dalley. 19有効になっている機能: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)

投稿2021/12/29 05:23

shozi3

総合スコア691

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itagagaki

2021/12/29 05:47

find tmp/ -type f -print0 が正解だというのはわかりますが、なぜなのかを解説されるともっと良い回答になるかと。
rasum

2021/12/29 06:51

皆様、ありがとうございます。 "-print0"は最後に付けるのですね。man内を print0 で検索し、その前後を読んでみましたがよくわかりませんでした。 「"-name"は"-type"よりも前の方が効率がよい」とかもあったので、しっかり読み込む必要があることはわかりました。
otn

2021/12/29 07:28 編集

-print0 等は「常に真を返す」という検索条件で、検索条件という意味では -type f と横並びです。 同じく「常に真を返す」-true との違いは、検索条件を評価した時点で、副作用としてパス名が出力されます。 検索条件は書いた順に評価されます。
otn

2021/12/29 07:37

> 「"-name"は"-type"よりも前の方が効率がよい」 man の -Olevelの部分に、こうあるので気にしなくても同じ効率のようです。 1 これはデフォルトの最適化レベルであり、伝統的な動作に当た る。 式を並べ替えるとき、ファイル名にのみ基づいた検査 (た とえば、 -name や -regex) が先に実行されるようにする。
rasum

2021/12/29 13:30

otn様、ありがとうございます。 "-print0"は「検索条件を評価した時点で、副作用としてパス名が出力されます」なのですね。
guest

0

以下、質問内容を勘違いしていましたので無視して下さい。

GNU find であれば -printf%P オプションを使います。

GNU find(1)
> -printf format
>
> %P File's name with the name of the starting-point under which it was found removed.

$ find --version
find (GNU findutils) 4.8.0

$ find tmp/ -printf '%P\0'

投稿2021/12/29 05:04

編集2021/12/29 05:54
melian

総合スコア19714

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rasum

2021/12/29 05:38

melian様、ありがとうございます。 検索された各ファイルにはパスを付けた出力"tmp/myfile2tmp/myfile1"を希望しますが、パスを付きファイル名出力を指定するとなぜか先頭に不要な親ディレクトリ名が入ります。 (例) -printf '%p' でもうまくいきません。 $ find tmp/ -printf '%p' -type f tmp/tmp/myfile2tmp/myfile1
melian

2021/12/29 05:50

すみません、質問を勘違いしていました。この回答は無視して下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問