/ / Bash skrypt powłoki do plików glob w kilku katalogach, dodaj do archiwum i usuń oryginalny plik - bash

Skrypt powłoki Bash do plików glob w kilku katalogach, dodaj do archiwum i usuń oryginalny plik - bash

Próbuję napisać skrypt basha, który wykonuje następujące czynności:

  1. Wylicza listę plików w katalogu, które pasują do określonego wzorca
  2. Tworzy plik tar zawierający pasujące pliki
  3. Usuwa (tj. Usuwa) pasujące pliki z ich katalogów źródłowych

Aby zachować prostotę, zamierzam użyć zakodowanej listy katalogów i wzorców plików

Oto, do czego do tej pory doszedłem:

#!/bin/bash

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

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

Nie jestem jednak pewien, jak postępować od tego momentu. W szczególności potrzebuję pomocy w:

  1. Jak globować pliki pasujące do wzorca $ f
  2. Jak dodać CAŁĄ listę pasujących plików (np. Ze wszystkich katalogów) do pliku tar za jednym zamachem

Jeśli chodzi o usuwanie plików, myślę o prostej iteracji listy ENTIRE uzyskanej w kroku 2 powyżej i „rm” rzeczywistego pliku - czy istnieje lepszy / szybszy / bardziej elegancki sposób?

PS:

Używam tego na Ubuntu 10.0.4 LTS

Odpowiedzi:

0 dla odpowiedzi № 1

tar(1) obsługuje --remove-files opcja, która usunie pliki po dodaniu ich do archiwum.

W zależności od tego, co próbujesz zrobić ze swoimi globusami powłoki, możesz również zignorować wykonywanie tej dodatkowej pracy. Spróbuj tego:

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

0 dla odpowiedzi nr 2

Jeśli chcesz użyć pętli, ponieważ masz wiele katalogów, możesz użyć -r opcja dołączania do pliku tar. Możesz także użyć --remove-files aby usunąć pliki po dodaniu ich do archiwum.

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

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

Jeśli nie masz --remove-files opcja, użyj rm $f po tar dowództwo.