小さなファイルがたくさんあるフォルダ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