通常のファイルの代わりにSedを検索して置換する

通常のファイルの代わりにSedを検索して置換する

私はポータブルアナコンダパッケージを開発しており、findとsedを使用してすべてのファイルを見つけて、現在のディレクトリとサブディレクトリのファイル内のパスを変更しようとしています。

ただし、コマンドを実行すると、sedでエラーが発生します。

sed: couldn't edit anaconda3: not a regular file

私が使用するコマンドは次のとおりです。

find ./ -type f -exec sed -i -e "s+/opt/conda_tools+$TOOLKIT_DIR+g" * {} \;

/がパスの一部であるため、+を区切り文字として使用します。スクリプトを実行するディレクトリの内容は次のとおりです。

drwxr-xr-x 24 test_user linuxusers 4096 11月21日 16:07 anaconda3

findコマンドのみを実行すると、期待どおりにファイルが一覧表示されますが、何らかの理由でディレクトリ名がまだ選択されています。また、成功せずに次のようなコマンドバリアントを試しました。

find ./ -type f -exec sed -i '' "s+/opt/conda_tools+$INSTALL_DIR+g" * {} \;

以前は find と sed をうまく使用したことがありますが、次にどこに行くべきかは少し混乱しています。私がここで見逃している明白なことがあるのか​​、それほど明確ではないのですか?

ベストアンサー1

そこにある「*」を削除してください。

find ./ -type f -exec sed -ie "s+/opt/conda_tools+$TOOLKIT_DIR+g" * {} \;

だから

find ./ -type f -exec sed -ie "s+/opt/conda_tools+$TOOLKIT_DIR+g" {} \;

おすすめ記事