Czasami edytowałem jakiś plik i chcę przenieść go do innego folderu. (Zwykle: do folderu Dropbox, w którym nie chciałem pracować, aby uniknąć ciągłego aktualizowania innych właścicieli folderu). Robię to na przykład za pomocą
mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
Potem często chcę zmienić katalog na katalog docelowy mojej poprzedniej operacji przenoszenia. Uderzam w strzałkę w górę, usuwam finał file.pdf
, trzymam lewy, kasuję mv file.pdf
i zastępuję go cd
.
Czy jest na to szybszy i mądrzejszy sposób? Czy istnieje polecenie „przenieś plik, a następnie zmień katalog na” lub skrót do ostatnio używanego katalogu lub coś w tym rodzaju?
command-line
mv
Mees de Vries
źródło
źródło
Odpowiedzi:
Jeśli używasz bash, jego interakcja z historią ma tylko skrót do tego. Desygnator słowo za ostatni argument poprzedniego polecenia:
W połączeniu z modyfikatorem, aby usunąć ostatni składnik nazwy ścieżki:
Po opcjonalnym desygnatorze słowa możesz dodać sekwencję jednego lub więcej poprawnych modyfikatorów , każdy poprzedzony znakiem „:”.
Więc:
Tego samego skrótu można także użyć w Zsh.
źródło
Jeśli nie zmieniasz nazwy pliku, możesz go pominąć, a mv doda go automatycznie; jest to szczególnie przydatne podczas przenoszenia wielu plików:
Z katalogiem jako ostatnim argumentem możesz użyć
!!:$
lub,!$
jak opisuje odpowiedź muru.Jeśli używasz bash ze zwykłymi ustawieniami domyślnymi, możesz zamiast tego użyć Alt+ ..
(Jest to
insert-last-argument
polecenie readline ;bind -p
wyświetli listę wszystkich twoich bieżących powiązań).źródło
mv
zawsze nadpisuje pliki docelowe w ciszy, chyba że określisz opcje-i
/--interactive
lub-n
/--no-clobber
. Właśnie dlatego mamalias mv='mv -i' cp='cp -i'
w sobie.bashrc
.Innym podejściem jest utworzenie własnego polecenia przeznaczonego do tego celu. Można to zrobić za pomocą funkcji, która może wyglądać następująco:
Gdzie: (1)
mv-special
jest nazwą funkcji; (2) zmienne$1
i$2
argumenty w funkcji, które będą używane przez komendymv
icd
; (3)$(echo $2-)
dodaje znak wildcat na końcu łańcucha w var$2
i naprawia zachowanie,dirname
jeśli zmienna$2
zawiera tylko ścieżkę; (4)$(dirname $(echo $2-))
odfiltruje tylko ścieżkę$2
.Zgodnie z tą odpowiedzią funkcja może wyglądać następująco:
Gdzie:
${2%/*}
odfiltruje tylko ścieżkę$2
.Aby funkcja ta była dostępna jako polecenie, należy ją wyeksportować :
Stosowanie:
lub:
Proszę zwrócić uwagę, że - dla obu wariantów - drugi argument (
$2
) musi kończyć się nazwą pliku lub ukośnikiem (/
).Aby nasze nowe polecenie było stale dostępne, do funkcji należy dołączyć definicję funkcji i polecenie eksportu
~/.bashrc
:lub:
Niestandardowe polecenie można wykonać za pomocą wykonywalnego pliku skryptu, który jest umieszczony w
~/bin
lub w/usr/sbin
: Jak mogę utworzyć niestandardowe polecenie terminala (w celu uruchomienia skryptu)? Ale szczerze mówiąc, miałem problem z zachowaniem sięcd
w tym scenariuszu.źródło