Próbuję napisać skrypt basha, który wykonuje następujące czynności:
- Wylicza listę plików w katalogu, które pasują do określonego wzorca
- Tworzy plik tar zawierający pasujące pliki
- 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:
- Jak globować pliki pasujące do wzorca $ f
- 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 № 1tar(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.