Uruchamiam polecenie ze skryptu takiego jak
tar -c -f ar.tar a b c d
gdzie b, cid mogą nie istnieć i mogą być katalogami. Rozwiązania, które wymyśliłem, potokują wyjście ls -d
do grep
, następnie łączą go z tar
poleceniem lub włączają rozszerzone globusy dla @(a|b|c|d)
.
Czy istnieje lepszy sposób na zrobienie tego? Jestem na Debian Wheezy, który nie wydaje się mieć --include
parametru.
--ignore-failed-read
opcję?Odpowiedzi:
możesz spróbować
gdzie
c
do tworzeniaf ar.tar
określ plik tar$(ls a b c d)
wyświetli stdin, które pliki są rzeczywiście obecne (i poda błąd dla innych)źródło
tar cf ar.tar $(ls -d a b c d 2>/dev/null)
działa idealnie .. ale myślę, że jest czystszy dzięki extglobextglob
- używam kodu w powyższym komentarzuJeśli posiadanie pełnej ścieżki plików w archiwum tar jest w porządku, możesz:
-e
Opcja readlink będzie kanonicznej istniejących nazw plików i dyskretnie ignorować żadnych innych.źródło
--strip-components
podczas wyodrębniania.Posługiwać się
Wyjaśnienie
find
rekursja.-o
Oznacza-or
. Powyżej oznacza poszukiwanie tego symbolu wieloznacznego LUB tego. Jeśli masz tylko jeden wzór, nie ma takiej potrzeby-o
.źródło