Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перемещение файлов через find в Shell

26K
06 мая 2007 года
Student_Ilya
7 / / 29.04.2007
Перерыл man, всю документацию. Нужно переместить все файлы заданного пользователя из одного каталога в другой. Решение пишется на 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'{}' \;


Замечу, что не обязательно делать через find, возможно и другое решение. Главное - результат.

2
11 мая 2007 года
squirL
5.6K / / 13.08.2003
ну и? в чем проблема?
что мешает сделать
-exec mv {} $new_folder/ \;
26K
12 мая 2007 года
Student_Ilya
7 / / 29.04.2007
Цитата: squirL
ну и? в чем проблема?
что мешает сделать
-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

2
12 мая 2007 года
squirL
5.6K / / 13.08.2003
я знаю что означает {}, а вы невнимательны :). я написал не
Цитата:

-exec mv {} $new_fiolder/{} \;

а

Цитата:
-exec mv {} $new_fiolder/ \;


т. е. если
new_folder = /home/user/dir2/ ,а {} - у нас home/user/dir/file.txt,
file.txt перенесется в /home/user/dir2/

26K
13 мая 2007 года
Student_Ilya
7 / / 29.04.2007
Цитата: squirL
я знаю что означает {}, а вы невнимательны :).


Ого, спасибо. Теперь буду знать.

PS Почему же я раньше этого не знал...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог