Командная строка для текущей директории, аналогичная ~ для домашней директории?


24

Когда я использую команду cp или move в окне терминала, я в настоящее время нахожусь с bash в определенной папке, подобной этой.

NES@server:~/Desktop/dir1$

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

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

существует ли строка быстрого доступа для ссылки на текущий выбранный каталог? Так что в этом примере мне не нужно указывать полный путь к целевому каталогу, но команда знает, что он должен использовать текущий выбранный каталог в bash? т.е. как ~ обозначает домашний каталог?

Ответы:


42

Ваш текущий каталог .. Итак, cp /foo/fam/foo .скопируйте файл в ваш текущий каталог.

Аналогичная конструкция для «одной директории вверх» или родительский каталог текущего рабочего каталога, это две точки, то есть, ... (Спасибо @djeikyb.)

Итак, /usr/house/firstfloor/basementcd ..поднимает вас на один уровень вверх /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
Одно небольшое отличие, которое нужно помнить: .и ..уровень файловой системы, поэтому любая программа примет их. С другой стороны, ярлыки, такие как ~и ~-являются частью оболочки.
Гравитация

2
+1 за cd -; не знал, что он существует.
jg-faustus

6

Вы можете использовать $ (pwd), он будет преобразован в вывод команды pwd.

Пример:

echo $(pwd)

1
Или просто echo $PWD.
ulidtko

3

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


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

я знаю / не требуется но в одиночестве смущает меня, потому что также используется для выполнения команд из файла в текущей оболочке, например, ". 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, который является текущим каталогом для следующих команд копирования:

  • В первой команде копирования ( 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». создаст в текущем каталоге символическую ссылку, указывающую на файл / this / file с именем «file» (люди часто думают, что с «cp» просто не копируют данные, только какая-то ссылка: это неправильное определение, но хорошее начало ). Однако, противоположная конструкция: «ln -s. / This / dir» несколько интересна (создайте символическую ссылку как / this / dir со ссылкой на текущий каталог), но я думаю, что это выходит за рамки оригинальной темы, и это был не вопрос.
ЛГБ
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.