親ディレクトリに基づくcpコマンド

親ディレクトリに基づくcpコマンド

私の親フォルダには、次のような構造があり、特定のループを作成しようとしているフォルダがいくつかあります。

parentfolder/folder01/subfolder/map.png
parentfolder/folder02/subfolder/map.png
parentfolder/folder03/subfolder/map.png
parentfolder/folder04/subfolder/map.png

など...

したがって、各サブフォルダには名前付きファイルが含まれますmap.png(つまり、すべてのサブフォルダのファイルは同じ名前ですが、ファイルは異なります)。

各ファイルをコピーして親フォルダ全体に入れたいのですが、map.png同時に「サブフォルダ」の上のフォルダに基づいてコピーの名前を変更したいと思います。

たとえば、名前を変更しながら親フォルダにコピーしたいとします。map.pngその後、ループを使用して他のすべてのフォルダに対して同じことを行います。parentfolder/folder01/subfolderfolder01.png

私は同様のことを試しましたが、明らかに私が望むことをするために苦労しています。

for i in parentfolder/*; do 
  cd $i
  cd subfolder
  cp map.png ../../"$i".png
  cd -
done

私はまだ初心者であり、これについて非常に新しいものなので、助けてくれてありがとう。とても感謝しています。

ベストアンサー1

以下のようにforループを試してみてください。

for d in parentfolder/* ; do
    cp "$d/subfolder/map.png" "$d.png"
done

現在のディレクトリがparentfolder

おすすめ記事