cp は、検索操作でディレクトリ名を正しく評価しません。

cp は、検索操作でディレクトリ名を正しく評価しません。

特定のファイル名を持つファイルを見つけ、そのファイルの場所にファイルをコピーし、見つかったファイルを削除するスクリプトを作成しようとしています。

今は削除部分を無視して現在まで持っている内容は次のとおりです。

find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" `dirname {}` \;

残念ながら、見つかったファイルのインスタンスに対して「.」を返すため、ディレクトリ名を正しく評価できないようです。

答え1

find次のアクションが-execdirより適切に見えます。

find /path/to/searchdir -name file.rtf -execdir cp -v /path/to/filetocopy.rtf . \;

cpこれは、という名前のファイルを含むすべてのディレクトリで実行されるため、file.rtf実行するたびにそのディレクトリを.表示できます。cpcp

-deleteその後、ファイルを追加または削除できます(すべてが正常であることを確認した後)。

あなたの方法がうまくいかないのは、シェルがdirname {}実行される前に評価findしてdirname {}出力するためです.。だから

find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" `dirname {}` \;

~になる

find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" . \;

関連情報