Czy jest jakiś sposób wykonania mv
polecenia bez wpisania pełnej ścieżki w drugim argumencie?
Przykład:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
command-line
Finbarr
źródło
źródło
cd
przejść do katalogu, amv
stamtąd?Odpowiedzi:
Możesz użyć rozszerzenia nawiasu klamrowego bash. To:
rozwinie się w:
a następnie
mv
jest uruchamiany z tymi dwoma argumentami. Zobacz http://wiki.bash-hackers.org/syntax/expansion/brace, aby uzyskać więcej informacji na temat rozwijania nawiasów klamrowych.źródło
Jako alternatywę dla rozszerzenia nawiasów klamrowych możesz użyć funkcji rozszerzenia historii powłoki bash :
!
wprowadza rozszerzenie historii#
oznaczenie zdarzenia oznaczające bieżące polecenie$
desygnator słowa odnoszący się do ostatniego argumentuMożesz wykonać podstawienia w rozwinięciu, używając
s/pattern/replacement
składni podobnej do sed, npDawny.
Jeśli chcesz konkretnie ścieżkę (na przykład do
mv
pliku o zupełnie innej nazwie, której nie można łatwo uzyskać przez podstawienie), możesz użyćh
modyfikatora:Aby
readline
zapoznać się z innymi opcjami, w tym kombinacjami klawiszy umożliwiającymi wyrwanie ostatniego argumentu, zobacz Jak powtórzyć aktualnie wpisany parametr w konsoli bash?źródło
Możesz spróbować:
źródło
Ze zmienną
`DIR=./really/long/path/
mv "$DIR"foo.bar "$DIR"foo.bz
W jednej linii:
DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
Zmiana katalogu
cd
przejść do katalogu, w którym chcesz pracować:cd ./really/long/path
mv foo.bar foo.bz
W jednej linii:
cd ./really/long/path && mv foo.bar foo.bz
źródło
&&
w ostatniej linijce. W przeciwnym razie, jeśli sięcd
nie powiedzie,mv
zostanie uruchomiony w niewłaściwym katalogu, potencjalnie nadpisując plik. Zcd ./really/long/path && mv foo.bar foo.baz
,mv
zostanie uruchomiony tylko wtedy, gdycd
uda się zmienić katalog.Możesz użyć aliasu, aby skrócić nazwę katalogu:
źródło
alias test='/var/log' ; cd test
daje-bash: cd: test: No such file or directory
.