Jednym z twoich problemów jest to, że pominąłeś podwójne cudzysłowy wokół podstawiania polecenia, więc wynik date
polecenia był podzielony na spacje. Zobacz Dlaczego mój skrypt powłoki dusi się na białych znakach lub innych znakach specjalnych? To jest poprawne polecenie:
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
Jeśli chcesz dołączyć do oryginalnej nazwy pliku, musisz mieć ją w zmiennej.
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
Jeśli używasz bash, możesz zamiast tego użyć rozwinięcia nawiasu klamrowego.
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
Jeśli chcesz skopiować plik do innego katalogu i dołączyć znacznik czasu do oryginalnej nazwy pliku, możesz to zrobić w ten sposób - ${source##*/}
rozwija się do wartości source
bez części do ostatniej /
(usuwa najdłuższy przedrostek pasujący do wzorca */
):
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
Jeśli Test1
jest katalogiem, jest rekurencyjnie kopiowany, a pliki wewnątrz katalogu zachowują swoją nazwę: tylko katalog najwyższego poziomu dołącza znacznik czasu (np. Test1/foo
Jest kopiowany Test1-05-10-15-07:19:42 PM
). Jeśli chcesz dołączyć znacznik czasu do wszystkich nazw plików, to inny problem.
Wybór formatu znacznika czasu jest złym pomysłem: jest trudny do odczytania dla ludzi i trudny do sortowania. Powinieneś użyć formatu, który jest łatwiejszy do odczytania i który można łatwo sortować, tj. Z częściami w malejącym porządku ważności: rok, miesiąc, dzień, godzina, minuta, sekunda oraz z oddzieleniem części daty i części czasu.
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y%m%d-%H%M%S")"
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y-%m-%dT%H%M%S%:z")"