特定のファイル名を持つファイルを見つけ、そのファイルの場所にファイルをコピーし、見つかったファイルを削除するスクリプトを作成しようとしています。
今は削除部分を無視して現在まで持っている内容は次のとおりです。
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
実行するたびにそのディレクトリを.
表示できます。cp
cp
-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" . \;