パターンで検索し、同じフォルダに別の名前でコピーします。

パターンで検索し、同じフォルダに別の名前でコピーします。

フォルダ構造は次のとおりです。

/ホーム/ユーザー/写真/休暇/イタリア/ローマ/写真。フロント.001.jpg

ローマのフォルダには他の写真もたくさんありますが、興味があるのは」フロント「ファイル名に。このファイルをコピーして名前を付ける必要があります。」ファンアート.jpg"(まだローマのフォルダにあります)。

イタリア語の親フォルダに保存されているすべてのフォルダに対してこれを行いたいと思います。

この画像を検索しようとしましたが、find別の名前を使用して複製することはできません。

この問題を解決する方法を知っていますか?

ベストアンサー1

-execdirこれを使用して、ファイルがあるディレクトリに基づいてコピーを作成できます。

find Italy -name '*.front.*' -execdir cp -- {} 'fanart.jpg' \;

例: 与えられた

$ tree Italy/
Italy/
├── Florence
│   ├── photo.back.001.jpg
│   ├── photo.back.002.jpg
│   ├── photo.back.003.jpg
│   ├── photo.front.001.jpg
│   ├── photo.front.002.jpg
│   └── photo.front.003.jpg
├── Naples
│   ├── photo.back.001.jpg
│   ├── photo.back.002.jpg
│   ├── photo.back.003.jpg
│   ├── photo.front.001.jpg
│   ├── photo.front.002.jpg
│   └── photo.front.003.jpg
└── Rome
    ├── photo.back.001.jpg
    ├── photo.back.002.jpg
    ├── photo.back.003.jpg
    ├── photo.front.001.jpg
    ├── photo.front.002.jpg
    └── photo.front.003.jpg

3 directories, 18 files

それから

$ find Italy -name '*.front.*' -execdir cp -v -- {} 'fanart.jpg' \;
‘./photo.front.001.jpg’ -> ‘fanart.jpg’
‘./photo.front.003.jpg’ -> ‘fanart.jpg’
‘./photo.front.002.jpg’ -> ‘fanart.jpg’
‘./photo.front.001.jpg’ -> ‘fanart.jpg’
‘./photo.front.003.jpg’ -> ‘fanart.jpg’
‘./photo.front.002.jpg’ -> ‘fanart.jpg’
‘./photo.front.001.jpg’ -> ‘fanart.jpg’
‘./photo.front.003.jpg’ -> ‘fanart.jpg’
‘./photo.front.002.jpg’ -> ‘fanart.jpg’

(このパターンに一致するファイルが複数ある場合は、コピーが連続して上書き*.front.*されます。目的のものではない場合、または-nを追加してください--no-clobber。)

$ tree Italy/
Italy/
├── Florence
│   ├── fanart.jpg
│   ├── photo.back.001.jpg
│   ├── photo.back.002.jpg
│   ├── photo.back.003.jpg
│   ├── photo.front.001.jpg
│   ├── photo.front.002.jpg
│   └── photo.front.003.jpg
├── Naples
│   ├── fanart.jpg
│   ├── photo.back.001.jpg
│   ├── photo.back.002.jpg
│   ├── photo.back.003.jpg
│   ├── photo.front.001.jpg
│   ├── photo.front.002.jpg
│   └── photo.front.003.jpg
└── Rome
    ├── fanart.jpg
    ├── photo.back.001.jpg
    ├── photo.back.002.jpg
    ├── photo.back.003.jpg
    ├── photo.front.001.jpg
    ├── photo.front.002.jpg
    └── photo.front.003.jpg

システムバージョンが回避策をfindサポートしていない場合は、フルパス名-execdirのファイル名部分を削除し(フォームのPOSIXパラメータ拡張を使用するなど"${var%/*}")、小さなインラインシェルコマンドから新しい名前に置き換えることができます。sh -c

find Italy -name '*.front.*' -exec sh -c 'cp -v -- "$1" "${1%/*}/fanart.jpg"' sh {} \;

おすすめ記事