Bash 获取文件夹中文件的名称,并使用它们从另一个文件夹中移入具有这些名称的文件?

Bash 获取文件夹中文件的名称,并使用它们从另一个文件夹中移入具有这些名称的文件?,bash,unix,Bash,Unix,我有两个文件夹,如下所示: folder1 file1.shp file1.dbf file2.shp file2.dbf file3.shp file3.dbf folder2 file1.prj file2.prj file4.prj 我要做的是识别folder1中与folder2中的文件名相同的文件,独立于扩展名,并将它们传输到folder2。输出应为: folder2 file1.prj file2.prj file4.prj file1.shp file1.dbf file2.s

我有两个文件夹,如下所示:

folder1
file1.shp
file1.dbf
file2.shp
file2.dbf
file3.shp
file3.dbf


folder2
file1.prj
file2.prj
file4.prj
我要做的是识别folder1中与folder2中的文件名相同的文件,独立于扩展名,并将它们传输到folder2。输出应为:

folder2
file1.prj
file2.prj
file4.prj
file1.shp
file1.dbf
file2.shp
file2.dbf
到目前为止,我得到的是:

for i in folder2/*.*; do
  FILE=$(basename "$i")
  echo find folder1 -name ${FILE%.*}.* -exec mv -i {} folder2 \;
done
这是我从这段代码中得到的,但是文件并没有从folder1移动到folder2

find folder1 -name file1.* -exec mv -i {} folder2 ;
find folder1 -name file2.* -exec mv -i {} folder2 ;
find folder1 -name file3.* -exec mv -i {} folder2 ;
对不起,我昨天开始学习这种编程,所以非常感谢您的帮助

[编辑]

代码在第3行没有回声的情况下工作。感谢下面的评论指出这一点

for i in folder2/*.*; do
  FILE=$(basename "$i")
  find folder1 -name ${FILE%.*}.* -exec mv -i {} folder2 \;
done

我只是这样试过,它对我有用

#!/bin/bash

for f in folder2/*
do
filename=${f##*/}
filename_without_ext=${filename%.*}

for ff in ${filename_without_ext[@]}
do
    find folder1 -name ${ff}.* -exec mv -i {} folder2 \;
done

done

我认为您需要转义
*
(例如使用
\*
或引用:
“file1.*”
-否则shell将展开它并找不到匹配项。您是否先添加了
echo
来测试命令,但忘记删除它?您是否删除了
echo
??您需要直接启动
find
而不是echo。结果表明,代码在没有echo的情况下可以工作。谢谢!