Załóżmy, że w Bash odwiedzam katalog, a następnie inny katalog. Chciałbym skopiować plik z pierwszego katalogu do drugiego katalogu, ale bez określania ich długich ścieżek. Czy to możliwe?
Moim tymczasowym rozwiązaniem jest użycie /tmp
jako tymczasowego miejsca do przechowywania kopii pliku. cp myfile /tmp
kiedy jestem w pierwszym katalogu, a potem cp /tmp/myfile .
kiedy jestem w drugim katalogu. Ale mogę sprawdzić, czy plik coś nadpisze /tmp
.
Czy istnieje coś podobnego do schowka do kopiowania i wklejania pliku?
cd
polecenie, abyś mógł po prostucd -
wrócić do poprzedniego katalogu, strzałka w górę, aby przywołaćcd
polecenie, i edytować wierszcp
zamiastcd
. (ctrl-a (początek linii), alt-d (słowo-zabójca)cp -a
,, ctrl-e (koniec linii)).M-x term
możesz korzystać ze schowka Emacsa.Odpowiedzi:
Korzystając z Bash, po prostu odwiedzałbym katalogi:
Następnie użyłbym skrótu
~-
, który wskazuje na poprzedni katalog:Jeśli chcesz odwiedzić katalogi w odwrotnej kolejności, to:
źródło
"$OLDPWD"
. Dlaczego jednak trzy osobnecp
polecenia?cp -a ~-/file[1-3].txt .
cp
są przykładami. W prawdziwym świecie można również użyć znaków wieloznacznych, aby uprościć zadanie kopiowania.pushd
i analiziedirs
... ale to jest o wiele lepsze. Proponuję dodać fakt, który"$OLDPWD"
jest dokładnie równoważny~-
i bardziej przenośny (pomocny dla tych, którzy nie używająbash
).~+
jest również skrótem od"$PWD"
Gdybym zobaczył tę sytuację jako jednorazową, mógłbym:
Gdyby istniały katalogi, z których kopiowałem pliki częściowo, prawdopodobnie zdefiniowałbym dla nich pewne zmienne mnemoniczne w moim .profile.
Edytowano, aby dodać:
Po spaniu zastanawiałem się, jak blisko mogę dotrzeć do innych zachowań GUI / OS, w których wybierasz pewną liczbę plików, „wycinasz” lub „kopiujesz” je, a następnie „wklejasz” gdzie indziej. Najlepszym mechanizmem selekcji, jaki mogłem wymyślić, był twój mózg / preferencje plus funkcja globowania powłoki. Nie jestem bardzo kreatywny w nazywaniu, ale to jest podstawowy pomysł (w składni Bash):
Aby z niego skorzystać, należy umieścić kod do ~ / .bash_profile, następnie
cd
do katalogu źródłowego i metę albocopyfiles glob*here
albocutfiles glob*here
. Wszystko, co się dzieje, to to, że twoja powłoka rozszerza globusy i umieszcza te nazwy plików w tablicy. Następniecd
przejdź do katalogu docelowego i uruchompastefiles
, który wykonujecp
polecenie dla każdego pliku źródłowego. Jeśli pliki zostały wcześniej „wycięte”, pliki pastefile również usuwają plik źródłowy (lub próbuje to zrobić). Nie wykonuje to żadnego sprawdzania błędów (istniejących plików, przed potencjalnym zatkaniem ich za pomocącp
; lub czy masz uprawnienia do usuwania plików podczas „wycinania” lub że możesz ponownie uzyskać dostęp do katalogu źródłowego po przeprowadzce) tego).źródło
$OLDPWD
już istnieje, które można skrócić~-
w bash i zsh.Myślę, że
~-
to właściwa odpowiedź, ale zauważ, że bash ma wbudowany edytor linii, który może kopiować / wklejać tekst.Jeśli jesteś w trybie emacsa, możesz przywołać swoje
cd
polecenie z historii i użyć go, Control-uaby zabić linię do bashowego „schowka” zwanego zabójczym pierścieniem (są też inne sposoby). Następnie można ciągnąć ten ciąg do nowego polecenia w każdej chwili Control-y. Oczywiście w twoim przykładzie zależy to od tego, czy użyłeś bezwzględnej nazwy katalogu w swoimcd
poleceniu.Możesz także użyć interesującego domyślnego przypisania klawiszy Meta-.. Spowoduje to skopiowanie ostatniego słowa z poprzedniego polecenia do bieżącego wiersza. Jeśli się powtórzy, za każdym razem wraca o jedno polecenie w historii. Więc jeśli zrobisz
cd /x
, acd /y
następniecd
Meta-.Meta-.będziesz miał/x
swój wkład.źródło
Rozwijając odpowiedź Andersona M. Gomesa , Bash pozwala odwoływać się do dowolnego wcześniejszego katalogu na stosie katalogów, wpisując
~N
(lub~+N
) gdzieN
jest pozycja na stosie katalogów . Na przykład:Teraz możesz skopiować plik między dwoma wcześniejszymi katalogami, z których żaden nie jest bieżący, za pomocą:
Aby rozwiązać problem z oryginalnym plakatem, wykonaj następujące czynności:
W przypadku dużego zestawu plików można wymienić ich nazwy w pliku manifestu, a następnie wykonać kopię ze źródłowego katalogu:
Zobacz także: ta sekcja strony podręcznika użytkownika Bash
Podobnie w Tcsh możesz użyć
=2
notacji (zamiast~2
), aby odnieść się do drugiego katalogu na stosie katalogów.Zobacz także: ten rozdział strony podręcznika Tcsh
źródło
gdy jesteś w pierwszym katalogu, powiedzmy, że źródło lub
src
w skrócie, wykonajnastępnie
cd
do drugiego katalogu i wykonaj:-i
opcja zapyta, czy chcesz zastąpić, jeśli istnieje duplikat plikuźródło
Odmiana odpowiedzi anderson-m-gomes. Korzystając z Bash, po prostu odwiedzałbym katalogi:
Następnie użyłbym zmiennej $ OLDPWD, która wskazuje na poprzedni katalog:
Jeśli chcesz odwiedzić katalogi w odwrotnej kolejności, to:
źródło
$OLDPWD
zawiera spacje, łamie się. Poza tym zawsze używamcp -a
. Ponadto niefortunnie jest, że uzupełnianie tabulatorów jest przerywane przy zmiennych rozszerzeniach. Możesz jednak użyć ctrl-alt-e do rozszerzenia bieżącego wiersza poleceń po wpisaniu części $ OLDPWD.~-
to skrót od$OLDPWD
W bashu użyłbym pushd i popd . Te polecenia przechowują poręczny stos katalogów FIFO do późniejszego wykorzystania. Możesz sprawdzić stos w dowolnym momencie, korzystając z katalogów .
Jako taki zrobiłbym:
źródło
Możesz użyć
xclip
:Przykład:
Odwiedź także Xsel .
źródło
tar | gzip
do / ze schowka X. Trochę niezgrabny w porównaniu docp
i nie generalizuje do tworzenia dowiązań symbolicznych lub dowiązań twardych. (cp -as
lubcp -al
)Możesz sprawdzić
clipboard-files
skrypt tutaj: https://github.com/larspontoppidan/clipboard-filesZapewnia polecenia jak
ccopy
,ccut
icpaste
że za pomocą schowka środowiska graficznego i umożliwiają intuicyjną kopii / wklejanie plików:Gdy używany jest schowek środowiska pulpitu, kopiowanie / wklejanie będzie oddziaływać z plikami umieszczonymi w schowku w innych programach, takich jak menedżery plików i IDE. Przynajmniej działa na komputerach podobnych do Gnome.
Pełne ujawnienie, napisałem scenariusz po rezygnacji ze znalezienia czegoś takiego ...
źródło