LINUX.ORG.RU

Научите копировать проще в терминале без дублирования пути

 , , , ,


0

1

Есть команда cp, которая имеет синтаксис cp [КЛЮЧ]… [-T] ИСТОЧНИК НАЗНАЧЕНИЕ

cd /path/to/file
cp file newfile

Это просто. Но есть ли способ без помощи cd скопировать, переименовать или переместить файл не переходя в эту директорию и не дублировать путь до файла.

Например: Нам нужно, скопировать (создать бекап) файл в определённой директории с длинным путём, но нужно оставаться в домашней директории, чтобы начать следующее копирование уже в ней

guest@porteus:~$ pwd
/home/guest
guest@porteus:~$ cp /usr/folder/folder/folder/folder/folder/file.txt /usr/folder/folder/folder/folder/folder/file.txt.back
guest@porteus:~$ cp file1 file2

Согласитесь, что это выглядит плохо. Можно было бы сделать более элегантно. Например:

guest@porteus:~$ pwd
/home/guest
guest@porteus:~$ cd /usr/folder/folder/folder/folder/folder/
guest@porteus:~$ cp file.txt file.txt.back
guest@porteus:~$ cd ~/
guest@porteus:~$ cp file1 file2

Но в моей практике приходится перемещаться не только в домашнюю директорию, но и так же переходить по длинным путям, делать бекап или переименование, что очень неудобно, потому что приходится возвращаться в предыдущий путь, набирать всё с начала, а выделять мышью путь, только время тратить на «прицеливание».

Есть ли способ копировать, перемещать файлы из другой директории, как будто ты там находишься, типа cp file1 file2, чтобы не нужно было дублировать пути?

man читал, но что-то не выходит. Нашёл что-то про --parents и -t -T, но это не помогает. Может не так эти ключи расставлял.

Пользоваться mc ради 1-2 файлов, когда после копирования нужно потом выходить из mc, не вижу смысла.

Если не поняли вопрос, то пишите. Попробую объяснить подробнее.



Последнее исправление: SaintAnd (всего исправлений: 4)

man bash, раздел Brace Expansion (http://git.savannah.gnu.org/cgit/bash.git/tree/doc/bash.info?h=devel#n1567):

Brace expansions may be nested. The results of each expanded string are not sorted; left to right order is preserved. For example, a{d,c,b}e expands into `ade ace abe’.

И там ещё несколько абзацев.

AVRS ★★
()
Последнее исправление: AVRS (всего исправлений: 1)

cp /usr/folder/folder/folder/folder/folder/file.txt /usr/folder/folder/folder/folder/folder/file.txt.back

cp /usr/folder/folder/folder/folder/folder/file.txt{,.back}

cica
()
Ответ на: комментарий от AVRS

Спасибо, за ссылку. Я смотрел только ман cp, а нужно было аж туда смотреть

SaintAnd
() автор топика
Ответ на: комментарий от cica

Спасибо добрый человек, это действительно работает!

SaintAnd
() автор топика

В именах файлов есть только один запрещенный символ - нулевой, как конец имени. Потому не из чего сделать какой-то значок для mv, означающий «скопировать путь» и прочие хотелки. Спец-символы есть снаружи, в оболочке, с соотвествующим эскейпингом, например: переменные; команды, сохраняющие путь (dirs) и прочие ухищрения типа (cd path; cp f1 f2) , при которых не надо запоминать текущий путь.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

Хаха, подумать только. Скобочки поставил, и работать стало проще. Спасибо за ещё один способ обхода этого ограничения.

SaintAnd
() автор топика

Согласитесь, что это выглядит плохо. Можно было бы сделать более элегантно. Например:

Может я что-то не понял, но оно так и работает.

shpinog ★★★★
()
Ответ на: комментарий от AVRS

Тоже не знал. Спасибо, возьму на заметку.

SaintAnd
() автор топика
Ответ на: комментарий от AVRS

А можно и на несколько уровней: pushd/popd.

И ещё, трюк с - работает не только с cd, но и с git.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

Нет простого способа, чтобы ты не набирал путь к файлу. Я не беру в расчет табуляцию (автодополнение) и сходные команды из истории (up arrow при вводе). Для перемещения всегда пользуюсь pushd - popd.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо вам ребята, этой команды тоже не знал и делал всё по старинке :) Сколько команд я ещё не знаю ХD

SaintAnd
() автор топика

Чуть офтопа:
Ещё часто бывает нужен последний аргумент предыдущей команды. Alt+. позволяет добывать их по очереди ;)

bormant ★★★★★
()
Ответ на: комментарий от bormant

Интересная вещь хах, такое бывает, но не часто. Спасибо :)

SaintAnd
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.