Skrót wiersza poleceń dla bieżącego katalogu podobny do ~ dla katalogu domowego?

24

Kiedy używam polecenia cp lub move w oknie terminala, aktualnie mam bash w takim folderze jak ten.

NES@server:~/Desktop/dir1$

A teraz chcę skopiować plik z tego miejsca ~/anotherdir/dir2do aktualnie wybranego folderu w bash (dir1) użyłbym polecenia

cp ~/anotherdir/dir2/file ~/Desktop/dir1

czy istnieje łańcuch skrótów odnoszący się do bieżącego wybranego katalogu? Czyli w tym przykładzie nie muszę podawać pełnej ścieżki do docelowego katalogu, ale polecenie wie, że powinien używać bieżącego wybranego katalogu w bash? tzn. jak ~ oznacza katalog domowy?

NES
źródło

Odpowiedzi:

42

Twój aktualny katalog to .. Tak, cp /foo/fam/foo .kopiuje plik do bieżącego katalogu.

Analogiczna konstrukcja „jednego katalogu w górę” lub katalogu nadrzędnego bieżącego katalogu roboczego, to dwie kropki, tj ... (Dzięki @djeikyb.)

Tak więc, z /usr/house/firstfloor/basementcd ..przenosi cię o jeden poziom do góry /usr/house/firstfloor.

W tym samym przykładzie (zaczynając od /usr/house/firstfloor/basement, polecenie cd ../..zabierze cię do /usr/house.

Możesz również użyć za $PWDpomocą, echoaby uzyskać bieżący katalog:

echo $PWD

Nawiasem mówiąc, $OLDPWDda ci twój poprzedni katalog. (Do którego bashmożna również dotrzeć, wpisując cd -).

Belacqua
źródło
3
Dobry czas na naukę ..oznacza, że jeden katalog jest niższy. Może być używany wiele razy, tj.cd ../..
djeikyb
1
@ djeikyb - masz na myśli powyżej, jestem pewien. Tak więc cd ..zabierze Cię do katalogu nadrzędnego twojego bieżącego katalogu. Słuszna uwaga.
belacqua,
1
I chciałbym wspomnieć popd, a pushdjednak to zamienia się w eseju.
belacqua
2
Jedną małą różnicę do zapamiętania: .i ..są na poziomie systemu plików, więc każdy program je zaakceptuje. Z drugiej strony skróty takie jak ~i~- są częścią powłoki.
grawity
2
+1 dla cd -; nie wiedziałem, że istnieje.
jg-faustus
6

Możesz użyć $ (pwd), rozwiąże to dane wyjściowe polecenia pwd.

Przykład:

echo $(pwd)
João Pinto
źródło
1
Lub po prostu echo $PWD.
ulidtko
3

./ reprezentuje bieżący katalog. Możesz więc użyć polecenia cp ~/anotherdir/dir2/file ./Spowoduje to skopiowanie pliku „file” do poprawnego katalogu roboczego.

binW
źródło
3
Nie potrzebujesz ukośnika „”. też wystarcza. ukośnik (jako ogranicznik komponentu ścieżki) jest potrzebny tylko wtedy, gdy chcesz wstawić po nim inny komponent ścieżki, ale łatwiej jest po prostu opuścić ./, ponieważ i tak ścieżki względne mają zaczynać się od bieżącego katalogu :)
LGB
wiem / nie jest wymagane, ale. sam czuje się zagmatwany, bo służy również do wykonywania poleceń z pliku w bieżącej powłoce, np. „. envsetup.sh”. Tak więc dodanie / na końcu sprawia, że ​​jest to wyraźniejsze.
binW
1
Stycznie, jeśli tak ln -s /some/long/path/to/get/to/cake bez drugiego argumentu , spowoduje to bezpośrednie umieszczenie cakedowiązania symbolicznego w twoim nurcie. Bardzo dobrze dla leniwych. Zapisuje a ..
belacqua
2

Aby użyć bieżącego katalogu jako katalogu docelowego, użyj pojedynczej kropki ' .'

Długa odpowiedź

Korzystając z przykładu, wpisz: cp ~/anotherdir/dir2/file .

Aby zobaczyć kropkę ., ..oraz ../../nazwy katalogów w działaniu, skopiuj i wklej następujące polecenia w terminalu:

mkdir a && mkdir a/b && mkdir a/b/c && mkdir a/b/c2
cd a/b/c
cp /etc/default/grub .
cp /etc/default/grub ..
cp /etc/default/grub ../c2
cd ../../
tree

Dane wyjściowe polecenia drzewa wyglądają następująco:

.
└── b
    ├── c
       └── grub
    ├── c2
       └── grub
    └── grub

3 directories, 3 files

Na .górze drzewa danych wyjściowych znajduje się nowy katalog bieżący, a którym jest dziadek, do a/b/cktórego nawigowaliśmy za pomocą cd ../../polecenia. Pod awidzimy podkatalogów a/b, a/b/caa/b/c2

Analiza linia po linii

Najpierw stworzyliśmy 4 katalogi w jednym wierszu, używając &&do łączenia wielu wierszy razem.

Następnie zmieniliśmy katalog a/b/cna bieżący katalog dla następujących poleceń kopiowania:

  • W pierwszym poleceniu kopiowania ( cp) ustawiamy miejsce docelowe na nasz bieżący katalog ( c ) za pomocą ..
  • W drugim poleceniu kopiowania ustawiamy miejsce docelowe na katalog nadrzędny ( b ) za pomocą ...
  • W trzecim poleceniu kopiowania ustawiliśmy miejsce docelowe na katalog rodzeństwa ( c2 ) za pomocą../c2

Następnie, jak wspomniano wcześniej, zmieniliśmy bieżący katalog na a i uruchomiliśmy treepolecenie, aby wyświetlić wszystkie katalogi i pliki w folderze a.

Sprzątać

Po zakończeniu usuwamy trzy katalogi i pliki za pomocą:

cd ~/
rm -r tree
WinEunuuchs2Unix
źródło
1

Możesz użyć kropki ( .), ~+ rozwinięcia tyldy , pwdpolecenia lub zmiennej $ PWD do przedstawienia bieżącego katalogu roboczego (CWD). Wszystkie te polecenia mogą to zrobić:

  1. mv file_old_dir .
  2. mv file_old_dir ~+
  3. mv file_old_dir $(pwd)
  4. mv file_old_dir $PWD
Helio
źródło
0

Tak (jak zauważyli inni), bieżący katalog to „.”, Dlatego możesz uruchamiać programy / skrypty z bieżącego katalogu przy pomocy ./script (tylko skrypt nie będzie działał, chyba że. Nie jest częścią PATH, co nie jest zalecane chociaż). Używanie $ PWD lub $ (pwd) jest nieco przesadzone, nawet jeśli inni wspominali, że użycie pojedynczej kropki jest na pewno krótsze :) „..” to katalog nadrzędny, na pewno „/” to root. Miło też wspomnieć, że „cd -” przeniesie cię do poprzedniego katalogu, w którym byłeś przed zmianą cwd (bieżący katalog roboczy). Może być również przydatny w codziennej pracy. Pojedyncze polecenie „cd” bez żadnego innego wiersza poleceń spowoduje przejście do „~” (twojego domu).

LGB
źródło
1
$PWDnie jest przesadą przy tworzeniu dowiązań symbolicznych do ścieżek bezwzględnych.
ulidtko
Na pewno pomyślałem o przykładzie „cp”. Nawet w przypadku dowiązań symbolicznych zależy to od sytuacji: „ln -s / this / file”. utworzy dowiązanie symboliczne w bieżącym katalogu wskazując plik / ten / plik o nazwie „plik” (ludzie często myślą, że to tak, jakby „cp” po prostu nie kopiował danych, tylko pewnego rodzaju link: to nie jest poprawna definicja, ale to dobry początek ). Jednak odwrotna konstrukcja: „ln -s. / This / dir” jest dość interesująca (utwórz dowiązanie symboliczne jako / this / dir with odwołuje się do bieżącego katalogu), ale myślę, że jest to poza zakresem oryginalnego tematu, i to też nie było pytanie.
LGB