Перемещение файлов через find в Shell
Все вроде просто - берем find, указываем каталог в котором искать, указываем типом обычные файлы, а в exec пишем команду на перемещение. Загвоздка в определении имени файла, т.к. назвать файл ведь как-то нужно в новом каталоге.
Код такой (в последней строке неверно указано целевое имя файла, т.к. его и нужно определить)
Цитата:
read -p"Specify source folder: " folder
if [ ! -d $folder ];then
echo Folder $folder not exist
exit
fi
if [ -z $folder ];then
folder="."
fi
if [ -d $folder/ ];then
folder=$folder/
fi
read -p"Specify target folder: " new_folder
if [ ! -d $new_folder ];then
echo Folder $new_folder not exist
exit
fi
if [ -z $new_folder ];then
new_folder="."
fi
if [ -d $folder/ ];then
new_folder=$new_folder/
fi
read -p"Specify owner: " owner
if [ -z $owner ];then
echo Owner not specified
exit
fi
find $folder -type f -user $owner -exec mv '{}' $new_folder'{}' \;
if [ ! -d $folder ];then
echo Folder $folder not exist
exit
fi
if [ -z $folder ];then
folder="."
fi
if [ -d $folder/ ];then
folder=$folder/
fi
read -p"Specify target folder: " new_folder
if [ ! -d $new_folder ];then
echo Folder $new_folder not exist
exit
fi
if [ -z $new_folder ];then
new_folder="."
fi
if [ -d $folder/ ];then
new_folder=$new_folder/
fi
read -p"Specify owner: " owner
if [ -z $owner ];then
echo Owner not specified
exit
fi
find $folder -type f -user $owner -exec mv '{}' $new_folder'{}' \;
Замечу, что не обязательно делать через find, возможно и другое решение. Главное - результат.
что мешает сделать
-exec mv {} $new_folder/ \;
Цитата: squirL
ну и? в чем проблема?
что мешает сделать
-exec mv {} $new_folder/ \;
что мешает сделать
-exec mv {} $new_folder/ \;
{} - полный путь до файла, т.е., к примеру, /home/user/dir/file.txt По указанной вами команде он будет перемещен (если new_folder = /home/user/dir2/) в /home/user/dir2/home/user/dir/file.txt Не очень, правда?
Проблема уже решена, решение см. http://www.kamforum.ru/index.php?s=&showtopic=7123&view=findpost&p=123771
Цитата:
-exec mv {} $new_fiolder/{} \;
а
Цитата:
-exec mv {} $new_fiolder/ \;
т. е. если
new_folder = /home/user/dir2/ ,а {} - у нас home/user/dir/file.txt,
file.txt перенесется в /home/user/dir2/
Цитата: squirL
я знаю что означает {}, а вы невнимательны :).
Ого, спасибо. Теперь буду знать.
PS Почему же я раньше этого не знал...