2016-02-03 1 views
0

У меня есть две папки следующим образом:Получить имена файлов в папке и использовать их для перемещения файлов с этими именами из другой папки?

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 
+1

Я думаю, вам нужно бежать '*' (например, с помощью '\ *' или процитировать: '» file1. * "' - иначе оболочка расширит его и не найдет совпадений. – Kenney

+1

Вы добавили 'echo', чтобы сначала проверить команду и забыть ее удалить? –

+1

Вы удалили' echo' ??? Вам нужно запустить ' find', а не echo. –

ответ

0

Я просто попытался это так, что он работает для меня ...

#!/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 
Смежные вопросы