名前は同じですが、拡張子が別のファイルにファイルを移動する方法

名前は同じですが、拡張子が別のファイルにファイルを移動する方法

小さなファイルがたくさんあるフォルダAがあります。親フォルダ内には、他のファイルを含む多くのフォルダがあります。これで、フォルダAには他のフォルダと同じ名前のファイルがいくつかありますが、最後にも.xmpがあります。

現在の構造は次のとおりです。

  • ~/A/foo.xmp
  • ~/A/bar.xmp
  • ~/フォルダ1/foo
  • ~/フォルダ2/列

これが私が望むものです:

  • ~/フォルダ1/foo
  • ~/folder1/foo.xmp
  • ~/フォルダ2/列
  • ~/folder2/bar.xmp

親ディレクトリ(そのファイルはfoo)でfoo.xmpに対応するファイルを見つけて、そのファイルをそこに移動するにはどうすればよいですか。

現在のディレクトリ内のすべてのファイルを通過するようにこれをループに入れますか?

答え1

for dir in folder*/
do
    for f in "$dir"*
    do
        base=${f#$dir}
        [ -f "A/$base.xmp" ] && mv "A/$base.xmp" "$dir"
    done
done

答え2

次のことができます。

#Assuming there are N folders folder1,folder2...folderN
for folder in folder* 
do
cd $folder
for file in *
do
#if file with .xmp extension exists in ~/A folder
[[ -f $file ]] && [[ -f ~/A/$file.xmp ]] && mv ~/A/$file.xmp .
done
cd ..
done

関連情報