find -execでコマンド置換を使用する方法は?

find -execでコマンド置換を使用する方法は?

以下を使用するとbasename {} .txt機能します。

find . -iname "*.txt" -exec basename {} .txt \;

xxx代わりに印刷されます./xxx.txt。オプションを使用すると$(basename {} .txt)失敗-execします。

find . -iname "*.txt" -exec echo "$(basename {} .txt)" \;

ただ印刷されます。./xxx.txt

この問題をどのように解決できますか?$(basename {} .txt)他のcmdのパラメータとして使用できることを願っています。操作や配管にxargsを使用する必要がありますかsh -c-exec basename {} \;

ベストアンサー1

努力する:

find -iname "*.txt" -exec sh -c 'for f do basename -- "$f" .txt;done' sh {} +

最初のコマンドは、$(...)サブシェルで実行されると{}リテラルとして処理されるため失敗します。したがって、戻ってbasename {} .txtくると、{}次のようにfindなります。

find . -iname "*.txt" -exec echo {} \;

どの印刷ファイル名が一致しますか?

おすすめ記事