find + sed + cpを使用してファイルを見つけ、別の名前のディレクトリにコピーします。

find + sed + cpを使用してファイルを見つけ、別の名前のディレクトリにコピーします。

Folder.jpgというファイルを1つのフォルダにコピーしようとしています。問題は、すべてのファイルの名前が同じであるため、プロセス中に名前を変更する必要があることです。 sedを使用してこれを行うことができることを知っていますが、名前を親フォルダの一部である名前に変更したいと思います。ファイルを見つけてコピーして得た結果です。

cp $(find . -iname "folder.jpg") .albumart/

フォルダ構造は./artist/artist.year.album/folder.jpgで、親フォルダ(またはその一部)を使用してファイル名を指定したいと思います。ライナーの作業を完了するのに役立つ人はいますか?問題をより複雑にするために、一部のフォルダに存在する場合は無視したいCD1およびCD2レイヤーもあります(例:./artist/artist.year.album/CD1/folder.jpg)。

ベストアンサー1

bashこのバージョンはフォルダ構造(例:)を使用し、./foo/bar/baz/folder.jpgすべてのスラッシュを下線で置き換えます(例:次のようにfoo_bar_baz_folder.jpg)。

find . -iname folder.jpg -exec bash -c 'for x; do x=${x#./}; cp -i "$x" ".albumart/${x//\//_}"; done' _ {} +

何をしても、複数の場所から同じターゲットにファイルを移動するたびに名前がクラッシュする可能性が常にあることに注意してください。

おすすめ記事