У меня есть две папки следующим образом:Получить имена файлов в папке и использовать их для перемещения файлов с этими именами из другой папки?
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 ;
Извините, я начал изучать этот вид программирования вчера, поэтому любая помощь очень ценится.
[EDIT]
код работает без эха в линии 3. Благодаря тем, кто комментировал ниже указывая его.
for i in folder2/*.*; do
FILE=$(basename "$i")
find folder1 -name ${FILE%.*}.* -exec mv -i {} folder2 \;
done
Я думаю, вам нужно бежать '*' (например, с помощью '\ *' или процитировать: '» file1. * "' - иначе оболочка расширит его и не найдет совпадений. – Kenney
Вы добавили 'echo', чтобы сначала проверить команду и забыть ее удалить? –
Вы удалили' echo' ??? Вам нужно запустить ' find', а не echo. –