как переместить файлы с одного пути на другой в unix с помощью shell-скрипта - PullRequest
0 голосов
/ 20 сентября 2010

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

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

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

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

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

for i in $sourcePaths
 do
    echo $i
 done

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

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

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

Привет всем, еще один вопрос. Когда я архивирую файл с помощьювышеупомянутая опция, это создает подпапку в zip-файле согласно его path.ie.если я архивирую файлы журналов из 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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 21 сентября 2010

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

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

, который создаст

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

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

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 / abc)


Чтобы переместить файлы из источника в 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 -@
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 -@
done

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

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 -@
done
1 голос
/ 20 сентября 2010

Следующее будет проходить по всем исходным путям, создайте файл 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 не могут содержать пробелы или табуляции, файлы журналов не рекурсивно ищутся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...