Ярлик командного рядка для поточного каталогу, подібний до ~ для домашнього каталогу?


24

Коли я використовую команду cp або переміщення у вікні терміналу, я зараз з bash у певній папці, як ця.

NES@server:~/Desktop/dir1$

І тепер я хочу скопіювати файл звідси ~/anotherdir/dir2в поточну обрану папку в bash (dir1), я би використовував команду

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

чи існує рядок швидкого доступу для посилання на поточний обраний каталог? Так що в цьому прикладі я не повинен надати повний шлях до цільового dir, але команда знає, що вона повинна використовувати поточний вибраний каталог у bash? тобто як ~ означає домашній каталог?

Відповіді:


42

Ваш поточний каталог .. Отже, cp /foo/fam/foo .скопіюйте файл у поточний каталог.

Аналогічна конструкція для "одного каталогу вгору" або батьківського каталогу вашого поточного робочого каталогу - це дві крапки, тобто ... (Дякую @djeikyb.)

Отже, з /usr/house/firstfloor/basement, cd ..переводить вас на один рівень до /usr/house/firstfloor.

У тому самому прикладі (починаючи з цього /usr/house/firstfloor/basement, команда cd ../..переведе вас до /usr/house.

Ви можете також використовувати $PWDз , echoщоб отримати поточний каталог:

echo $PWD

До речі, $OLDPWDдасть вам ваш попередній каталог. (До чого bashтакож можна дійти, набравши cd -.)


3
Добрий час, як будь-який вчитися, це ..означає, що на одну директорію нижче. Можна використовувати декілька разів, тобтоcd ../..
djeikyb

1
@djeikyb - ти мав на увазі вище, я впевнений. Отже, cd ..переведе вас у батьківський каталог вашого поточного каталогу. Влучне зауваження.
belacqua

1
І я б згадати popdі , pushdале це перетворюється в есе.
belacqua

2
Варто пам’ятати про невелику різницю: .і ..вони є на рівні файлової системи, тому будь-яка програма їх прийме. З іншого боку, ярлики, такі як ~і ~-є частиною оболонки.
grawity

2
+1 для cd -; не знав, що існує.
jg-faustus

6

Ви можете використовувати $ (pwd), це вирішить до виводу з команди pwd.

Приклад:

echo $(pwd)

1
Або просто echo $PWD.
ulidtko

3

./ представляє поточний каталог. Таким чином, ви можете використовувати команду. cp ~/anotherdir/dir2/file ./Це скопіює файл "файл" у правильну робочу директорію.


3
Ви не потребуєте косою рисою, "." теж достатньо. слеш (як шлях компонент роздільник) потрібен тільки якщо ви хочете поставити який - небудь інший компонент шляху після нього, але тоді простіше просто залишився ./ , оскільки відносні шляхи означають , починаючи з поточним каталогом в будь-якому випадку :)
LGB

я знаю / не потрібно, але. поодинці відчуває, що мене бентежить coz. також використовується для виконання команд з файлу в поточній оболонці, наприклад ". envsetup.sh". Тож додавання / в кінці просто робить це зрозумілішим.
binW

1
Тангенціально, якщо ви не маєте ln -s /some/long/path/to/get/to/cake жодного другого аргументу , він безпосередньо поставить cakeсимволічне посилання у поточний. Дуже добре для ледачих. Зберігає ..
belacqua

2

Щоб використовувати поточний каталог як каталог призначення, використовуйте одну крапку ' .'

Довга відповідь

Використовуючи свій приклад, ви введете: cp ~/anotherdir/dir2/file .

Щоб побачити точку ., ..і ../../імена каталогів в дії, скопіюйте та вставте наступні команди в вашому терміналі:

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

Вихід з команди дерева виглядає так:

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

3 directories, 3 files

У .верхній частині дерева виводиться новий поточний каталог a , бабуся і дідусь a/b/cякого ми перейшли до cd ../../команди. Під aми бачимо підкаталоги a/b, a/b/cіa/b/c2

Аналіз за лінією

Спочатку ми створили 4 каталоги в одному рядку, використовуючи &&для об'єднання кілька рядків разом.

Потім ми перейшли до каталогу a/b/c, який є поточним каталогом для наступних команд копіювання:

  • У першій команді copy ( cp) ми встановлюємо призначення в наш поточний каталог ( c ) з ..
  • У другій команді копіювання ми задаємо призначення батьківському каталогу ( b ) за допомогою ...
  • У третій команді копіювання ми встановлюємо призначення до каталогу братів ( c2 ) з../c2

Потім, як було сказано раніше, ми змінили поточний каталог на aта виконали treeкоманду для відображення всіх каталогів та файлів під a.

Прибирати

Після закінчення ми видаляємо три каталоги та файли за допомогою:

cd ~/
rm -r tree


1

Ви можете використовувати крапку ( .), ~+ розширення тильди , pwdкоманду або змінну $ PWD для представлення поточної робочої директорії (CWD). Усі ці команди можуть це зробити:

  1. mv file_old_dir .
  2. mv file_old_dir ~+
  3. mv file_old_dir $(pwd)
  4. mv file_old_dir $PWD

0

Так (як зазначали інші), поточний каталог - це ".", Тому ви можете запускати програми / скрипт із поточного каталогу за допомогою ./script (просто сценарій не працюватиме, якщо тільки. Не є частиною PATH, що не рекомендується хоча). Використання $ PWD або $ (pwd) є дещо зайвим, навіть якщо інші згадували, що використання символу однієї крапки коротше, напевно :) ".." є батьківським каталогом, напевно "/" є коренем. Також приємно зазначити, що "cd -" помістить вас у попередній каталог, де ви були до того, як ви змінили cwd (поточний робочий каталог). Це також може бути корисно в щоденній роботі. Одна команда "cd" без жодної іншої в командному рядку переведе вас у "~" (ваш будинок).


1
$PWDне є надлишком при створенні символьних посилань на абсолютні шляхи.
ulidtko

Я подумав про приклад "cp", де він точно є. Навіть із символьними посиланнями це залежить від ситуації: "ln -s / this / file". створить символьне посилання в поточному каталозі вказувального файлу / цього / файлу з назвою "файл" (люди часто думають, що це як з "cp", просто не копіювати дані, лише якесь посилання: це неправильне визначення, але це гарний початок ). Однак, протилежна конструкція: "ln -s. / This / dir" є дещо цікавою (створити символьне посилання як / this / dir з посиланням на поточний каталог), але я думаю, що це виходить за рамки вихідної теми, і це не було питання.
ЛГБ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.