以下を使用すると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 {} \;
どの印刷ファイル名が一致しますか?