Plik tar z datą jako nazwą?

16

Próbuję tar i gzip plik z datą i godziną jako nazwą:

date=$(date '+%d-%m-%Y_%H:%M:%S');    
tar -zcf "$date".tar.gz repo/bin/

Ale wracam:

tar (child): Cannot connect to 17-08-2017_21: resolve failed
tar: Child returned status 128
tar: Error is not recoverable: exiting now

Co dokładnie się tutaj dzieje i jak mogę to naprawić?

Czy tar próbuje połączyć się z nazwą tak, jakby to była ip?

Philip Kirkbride
źródło
7
Standardem ISO dla dat jest rrrr-mm-ddThh: mm: ss lub +%FT%Tw dateskładni. Oprócz podania daty w jednoznacznym formacie, sortuje się ładnie!
@drewbenn z datą GNU, także: date --iso-8601=s(ale dodaje także przesunięcie strefy czasowej)
muru
2
Odradzałbym używanie dwukropków. Coś podobnego 20170818_122314lub podobnego jest wystarczająco łatwe do rozpoznania i / lub parsowania. Dwukropki powodują problemy w różnych sytuacjach (właśnie je odkryłeś).
Rolf

Odpowiedzi:

31

Tak to jest. Dokumentacja mówi przynajmniej o GNU tar :

Jeśli nazwa pliku archiwum zawiera dwukropek ( :), zakłada się, że jest to plik na innym komputerze. Jeśli plik archiwum jest user@host:file, to plik jest używany na hoście . Dostęp do zdalnego hosta jest uzyskiwany za pomocą programu rsh z nazwą użytkownika . Jeśli nazwa użytkownika zostanie pominięta (wraz ze @znakiem), zostanie użyta nazwa użytkownika. (Jest to normalne zachowanie rsh.).

Zapewnia również obejście:

--force-local
      Archive file is local even if it has a colon.
steeldriver
źródło
5
Krótsze obejście: tar zcf ./"$date".tar.gz ...Wydaje się, że wiodąca specyfikacja ścieżki sprawia, że ​​tar traktuje ją jako zwykły plik
muru