Опитвам се да напиша скрипт bash, който прави следното:
- Изброява се чрез списък с файлове в директория, които съответстват на определен шаблон
- Създава tar файл, съдържащ съвпадащите файлове
- Премахва (т.е. изтрива) съвпадащите файлове от техните източници
За да запазите нещата просто, възнамерявам да използвам твърд кодиран списък с директории и файлови шаблони
Ето какво съм дошъл досега:
#!/bin/bash
filenames[0]="/home/user1/*.foo"
filenames[1]="/some/otherpath/*.fbar"
for f in ${filenames[@]}
do
echo "$f"
done
Въпреки това, не съм сигурен как да продължа оттук нататък. По-конкретно, имам нужда от помощ за:
- Как да завъртите файловете, съответстващи на шаблона $ f
- Как да добавите целия списък на съвпадащи файлове (т.е. от всички директории) към тарт файла наведнъж
Що се отнася до изтриването на файловете, имам предвид просто да се променят в целия списък, получен в стъпка 2 по-горе, и "rm" в действителния файл - има ли по-добър / по-бърз / по-елегантен начин?
PS:
Аз пускам това на Ubuntu 10.0.4 LTS
Отговори:
0 за отговор № 1tar(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
команда.