2010-09-20 2 views
0

Я хочу переместить файлы журналов с одного пути (путь источника) к другому пути (путь назначения). Этот путь источника и путь назначения присутствуют в одном текстовом файле. а ::Как перемещать файлы с одного пути на другой путь в unix с помощью shell-script

source_path=abc/xyz 
    source_path=pqr/abc 
    desination_path=abcd/mlk 

так я прочитал этот файл и сохраненные пути в различных variables.i имеют путь различных источников, так что я сохранил его в varible, который действует как массив. как ниже:

sourcePaths=`grep source_path myfile |cut -d= -f2` 
destPath=`grep destination_path myfile |cut -d= -f2` 

и у меня есть только один путь назначения, где я хочу переместить все эти файлы. Теперь я хочу путешествовать по всем этим исходным путям, найти файл журналов с определенным расширением, закрепить все эти файлы и перейти к пути назначения. Я использую цикл для извлечения данных из переменной sourcePaths (это просто пробная версия). в виде:;

for i in $sourcePaths 
do 
    echo $i 
done 

Может ли кто-нибудь помочь мне в этом.

Большое спасибо за ваш ответ Guys.Now, я хочу добавить в него фильтр. Я хочу перенести файлы из исходного пути, который составляет 10 дней, и я хочу удалить эти файлы из исходного пути после перемещения. Пожалуйста, помогите

Еще один вопрос! Что делать, если я хочу сохранить этот zip-файл с именем, которое содержит отметку времени, чтобы не было дублирования имени файла на пути назначения.

Привет всем, еще вопрос.Когда я делаю zip-файл с опцией выше, он создает подпапку в zip-файле в соответствии с его path.ie. если я zipping файлы журналов из src/int/xlog/abc, и когда я разархивирую этот zip-файл, эти новые трещины в zip-файле хранятся в файлах src/int/xlog/abc/abc.zip. Я не хочу этого. Я хочу, чтобы этот zip-файл напрямую содержал abc.zip. Не в подпапке.

Привет, ребята, я вернулся с еще одним вопросом. Используя нижеприведенный скрипт, я могу создать имя файла zip в качестве базового pathname.egxyz.zip и abc.zip в соответствии с моим приведенным выше путем, используя следующий код: :

timestamp=`date +%Y%m%d_%H%M%S` 
zipFile=$destPath/$(basename $sourcePath).$timestamp.zip 

Но теперь я хочу, чтобы создать это имя файла (имя файла ieZip) более конкретно зависит от его источника path.Like если моего содержимое файла текста

source_path=obj/imp/backup/logs/db1 
source_path=obj/res/input/int/db2 
desination_path=abcd/mlk 

Теперь я хочу создать имя zip-файла примерно так.

backup_logs_db1.zip 
input_int_db2.zip 

означает, что я хочу использовать фамилию три каталога, чтобы создать новое имя файла почтового индекса. Предусмотрено, что путь источника в текстовом файле содержит более трех имен каталогов.

Так может кто-нибудь мне помочь в этом. Thnaks заранее !!!

ответ

2

Для создания ZIP-архивов вы можете сделать это:

for sourcePath in $sourcePaths 
do 
    zipFile=$destPath/$(basename $sourcePath).zip 
    find $sourcePath -type f -name "*.log" | xargs zip $zipFile [email protected] 
done 

, который будет создавать

abcd/mlk/xyz.zip (содержащие все * .log файлы в ABC/А) и
abcd/mlk/abc.zip (содержащих все * .log файлы в PQR/ABC)

Для создания сжат GZIP архивов вы можете:

for sourcePath in $sourcePaths 
do 
    tarFile=$destPath/$(basename $sourcePath).tar 
    find $sourcePath -type f -name "*.log" -exec tar -uvf $tarFile {} \; 
    gzip $tarFile 
done 

, который будет создавать:

abcd/mlk/xyz.tar.gz (содержащее все * .log файлов в ABC/XYZ)
abcd/mlk/abc.tar.gz (содержащее все * .log файлов в PQR/а)


Для перемещения файлов от источника до Dest, которые не были изменены в течение последних 10 дней, вы можете использовать это:

for sourcePath in $sourcePaths 
do 
    find $sourcePath -type f -mtime +10 -name "*.log" -exec mv {} $destPath \; 
done 

Если вы хотите удалить исходные файлы после архивирования использовать следующее:

for sourcePath in $sourcePaths 
do 
    zipFile=$destPath/$(basename $sourcePath).zip 
    find $sourcePath -type f -mtime +10 -name "*.log" | xargs zip -mT $zipFile [email protected] 
done 

Используйте команду date для создания метки времени. Флаги:

%Y is the year 
%m is the month 
%d is the day 
%H is the hour 
%M are the minutes 
%S are the seconds 

Добавьте метку к имени ZipFile, поэтому она становится:

for sourcePath in $sourcePaths 
do 
    timestamp=`date +%Y%m%d_%H%M%S` 
    zipFile=$destPath/$(basename $sourcePath).$timestamp.zip 
    find $sourcePath -type f -mtime +10 -name "*.log" | xargs zip -mT $zipFile [email protected] 
done 

Используйте флаг -j зип хранить только имя файла без имени каталога. Новая команда будет:

for sourcePath in $sourcePaths 
do 
    timestamp=`date +%Y%m%d_%H%M%S` 
    zipFile=$destPath/$(basename $sourcePath).$timestamp.zip 
    find $sourcePath -type f -mtime +10 -name "*.log" | xargs zip -jmT $zipFile [email protected] 
done 
+0

@fahd :: Большое спасибо за ур ответ. Теперь я хочу добавить в него фильтр. Я хочу перенести файлы из исходного пути, который составляет 10 дней, и я хочу удалить эти файлы из исходного пути после перемещения. Пожалуйста, помогите – MAS1

+0

@fahd :: Спасибо за мгновенный ответ. Только один вопрос, мои предыдущие условия также работают с этим. Я имею в виду прошивку файла. Я хочу добавить только эти два фильтра, сохраняя мое предыдущее состояние, как оно есть. Ваш предыдущий ответ satiesfies мое все предыдущее условие, Хотите знать об этом новом сообщении. И я хочу удалить перемещенные файлы после перехода с исходного пути. – MAS1

+0

Да, предыдущие условия будут продолжать работать. Команда 'mv' перемещает файлы, поэтому да, они больше не будут в исходном пути. – dogbane

1

Ниже перечислены все пути источника, создайте файл tar.gz в $ destPath. Этот .tar.gz содержит папку с именем $sourcePath, содержащую файлы журналов (файлы с расширением .log).
Имя файла .tar.gz будет основано на базовом имени $ sourcePath, abc/xyz, в результате будет создан файл xyz.tar.gz.

for sourcePath in $sourcePaths;do 
    name=`basename $sourcePath` 
    tar czf "$destPath/$name.tar.gz" $sourcePath/*.log 
done 

Примечание: ваши source_path s не может содержать пробелов или табуляций, файлы журналов не рекурсивно поиска.

Смежные вопросы