Unixでfindを使用してデフォルトのファイル名を印刷するには?

Unixでfindを使用してデフォルトのファイル名を印刷するには?

私はデフォルトのファイル名を印刷するためにUnixでfindを使用しようとしました。単純にファイル名を印刷するために私が使用したコマンドは次のとおりです。

find . -type f -name \*.out -print

フルパスに限定されたパス名を印刷します。しかし、私はデフォルトのファイル名だけが欲しいです。だから私は次のコマンドを試しました。

find . -type f -name \*.out -exec basename {}

ただし、エラーが発生して表示されます。

find: incomplete statement

この問題を克服するのに役立ちます。

ベストアンサー1

;基本式を終了する文字がありません(参照:POSIX照会):

find . -type f -name \*.out -exec basename {} ';'

エスケープするか引用する必要があるのは、;シェルリストの区切り文字です。シェルが文字通り処理するようにしてください。\;';'または";"すべてが大丈夫です。

ただし、このソリューションは見つかったすべてのファイルを呼び出すため、basename遅くなります。ファイル名に改行文字が含まれていない場合は、次のことができます。

find . -type f -name '*.out' | sed -e 's#.*/##'

お持ちの場合GNU coreutils バージョン >= 8.16、またはOSXを使用している場合は、次のものを使用できます。デフォルト名-a:

find . -type f -name '*.out' -exec basename -a -- {} +

おすすめ記事