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的情况下可以工作。谢谢!