/ / Bash shell скрипт на глобални файлове в няколко директории, добавете към архив и премахнете оригиналния файл - bash

Bash shell скрипт на глобални файлове в няколко директории, добавете към архив и премахнете оригиналния файл - bash

Опитвам се да напиша скрипт bash, който прави следното:

  1. Изброява се чрез списък с файлове в директория, които съответстват на определен шаблон
  2. Създава tar файл, съдържащ съвпадащите файлове
  3. Премахва (т.е. изтрива) съвпадащите файлове от техните източници

За да запазите нещата просто, възнамерявам да използвам твърд кодиран списък с директории и файлови шаблони

Ето какво съм дошъл досега:

#!/bin/bash

filenames[0]="/home/user1/*.foo"
filenames[1]="/some/otherpath/*.fbar"

for f in ${filenames[@]}
do
echo "$f"
done

Въпреки това, не съм сигурен как да продължа оттук нататък. По-конкретно, имам нужда от помощ за:

  1. Как да завъртите файловете, съответстващи на шаблона $ f
  2. Как да добавите целия списък на съвпадащи файлове (т.е. от всички директории) към тарт файла наведнъж

Що се отнася до изтриването на файловете, имам предвид просто да се променят в целия списък, получен в стъпка 2 по-горе, и "rm" в действителния файл - има ли по-добър / по-бърз / по-елегантен начин?

PS:

Аз пускам това на Ubuntu 10.0.4 LTS

Отговори:

0 за отговор № 1

tar(1) подкрепя един --remove-files опция, която ще премахне файловете след добавяне в архива.

В зависимост от онова, което се опитвате да направите с черупките си, може да пренебрегнете и да правите всичко това допълнително. Опитайте това:

tar cf /dir/archive.tar --remove-files /home/user1/*.foo /some/otherpath/*.fbar

0 за отговор № 2

Ако искате да използвате цикъл, защото имате много директории, можете да използвате -r опция за добавяне към файла с tar. Можете също така да използвате --remove-files да премахнете файлове, след като ги добавите към архива.

filenames[0]="/home/user1/*.foo"
filenames[1]="/some/otherpath/*.fbar"

for f in "${filenames[@]}"
do
tar -rvf --remove-files foo.tar $f
done

Ако не разполагате с --remove-files опция, използване rm $f След tar команда.