ファイル名にパスの一部を追加してファイルを見つけて名前を変更します。

ファイル名にパスの一部を追加してファイルを見つけて名前を変更します。

2 つのレベルのサブフォルダーがあるフォルダーがあります。 2番目のサブフォルダにはjpgファイルがあります。すべてのjpgの名前は同じです。cover.jpg

例:

/home/user/folder001/folderAAA/cover.jpg
/home/user/folder002/folderBBB/cover.jpg
[...]
/home/user/folder999/folderZZZ/cover.jpg

すべてのファイルを見つけて新しいフォルダにコピーし、cover.jpg名前を変更して、最初と2番目のサブフォルダの名前をファイル名にプレフィックスとして追加する必要があります。

例:
予想操作後の ot の内容は、次/home/user1/newfolderのようになります。

folder001_folderAAA_cover.jpg
folder002_folderBBB_cover.jpg
[...]
folder999_folderZZZ_cover.jpg

ベストアンサー1

これはsedコマンドを使用して簡単に達成できます。名前を変更する必要があるファイルのリストを探し、sed / echoファイルパスを使用して要件を満たします。

cd /home/user
for fl_nm in $(find . -type f -name "cover.jpg")
do
echo copying the file with desired name to new folder : $fl_nm
cp $fl_nm /home/user1/newfolder/$(echo ${i#*/*} | sed 's/\//_/g')
#Above copy command ignores the find result which extracts only file path from ./**file_path**
done

Cover.jpgという名前のすべてのファイルは、ファイル名にそのフォルダの詳細を含む/home/user1/newfolderにコピーされます。

おすすめ記事