Предположим, в Bash я захожу в каталог, а затем в другой каталог. Я хотел бы скопировать файл из первого каталога во второй каталог, но без указания длинных путей к ним. Является ли это возможным?
Мое временное решение - использовать его /tmp
как временное место для хранения копии файла. cp myfile /tmp
когда я нахожусь в первом каталоге, а затем, cp /tmp/myfile .
когда я нахожусь во втором каталоге. Но я могу проверить, будет ли файл перезаписывать что-либо в /tmp
.
Есть ли что-то похожее на буфер обмена для копирования и вставки файла?
cd
команду, чтобы вы могли простоcd -
вернуться в предыдущий каталог, нажать стрелку вверх, чтобы вызватьcd
команду, и отредактировать строкуcp
вместоcd
. (ctrl-a (начало строки), alt-d (kill-word)cp -a
, ctrl-e (конец строки)).M-x term
вы можете использовать буфер обмена Emacs.Ответы:
Используя Bash, я бы просто посетил каталоги:
Затем я бы использовал ярлык
~-
, который указывает на предыдущий каталог:Если вы хотите посетить каталоги в обратном порядке, то:
источник
"$OLDPWD"
. Почему три отдельныеcp
команды?cp -a ~-/file[1-3].txt .
cp
являются примерами. В реальном мире символы подстановки также могут использоваться для упрощения задачи копирования.pushd
разбореdirs
... но это намного, намного лучше. Я предлагаю вам добавить факт, который"$OLDPWD"
в точности эквивалентен~-
и более переносим (полезно для тех, кто не используетbash
.)~+
это также сокращение для"$PWD"
Если бы я увидел эту ситуацию как разовую, я мог бы:
Если бы были каталоги, в которых я обнаружил, что копирую файлы из полурегула, я бы, вероятно, определил для них некоторые мнемонические переменные в моем .profile.
Отредактировано, чтобы добавить:
Поспав на нем, я подумал, насколько близко я смог добраться до других поведений GUI / OS, где вы выбираете некоторое количество файлов, «вырезаете» или «копируете» их, а затем «вставляете» их в другое место. Лучшим механизмом выбора, который я мог придумать, был ваш мозг / предпочтения плюс функция оболочки. Я не очень креативен с именами, но это основная идея (в синтаксисе Bash):
Чтобы использовать его, поместите код в ~ / .bash_profile, затем
cd
в исходный каталог и запустите либоcopyfiles glob*here
илиcutfiles glob*here
. Все, что происходит, это то, что ваша оболочка расширяет глобусы и помещает эти имена файлов в массив. Затем вы перейдетеcd
в каталог назначения и запуститеpastefiles
, который выполняетcp
команду для каждого исходного файла. Если вы ранее «вырезали» файлы, то pastefiles также удаляет исходный файл (или пытается). Это не делает никакой проверки ошибок (существующих файлов, до того, как они могут быть захлопнуты;;cp
или что у вас есть разрешения на удаление файлов во время «вырезания», или что вы можете повторно получить доступ к исходному каталогу после того, как вы выйдете этого).источник
$OLDPWD
уже существует, который можно сократить~-
в bash и zsh.Я думаю, что
~-
это правильный ответ, но учтите, что в bash есть встроенный редактор строк, который может копировать / вставлять текст.Если вы находитесь в режиме emacs, вы можете вызвать свою
cd
команду из истории и использовать ее Control-uдля уничтожения строки в «буфере обмена» bash, называемом kill-ring (есть и другие способы). Затем вы можете в любой момент вернуть эту строку в новую команду с помощью Control-y. Очевидно, в вашем примере это зависит от того, использовали ли вы в своейcd
команде абсолютное имя каталога .Вы также можете использовать интересное связывание ключей по умолчанию Meta-.. Это копирует последнее слово из предыдущей команды в вашу текущую строку. При повторении каждый раз возвращается одна команда в истории. Так что, если вы сделаете
cd /x
, аcd /y
затемcd
Meta-.Meta-.вы будете иметь/x
в своем входе.источник
Расширяя ответ Андерсона М. Гомеса , Bash позволяет вам ссылаться на любой предыдущий каталог в вашем стеке каталогов, печатая
~N
(или~+N
), гдеN
находится позиция в стеке каталогов . Например:Теперь вы можете скопировать файл между двумя предыдущими каталогами, ни один из которых не является текущим, с помощью:
Чтобы решить проблему оригинального плаката, вы должны сделать:
С большим набором файлов вы можете перечислить их имена в файле манифеста, а затем сделать копию из исходного каталога:
Смотрите также: этот раздел справочной страницы Bash
Аналогично, в Tcsh вы можете использовать
=2
нотацию (а не~2
) для ссылки на второй каталог в вашем стеке каталогов .Смотрите также: этот раздел справочной страницы Tcsh
источник
когда вы находитесь в первом каталоге, скажем, источник или
src
вкратце, выполнитьзатем
cd
во второй каталог и выполните:-i
вариант будет спросить , если вы хотите переписать, если есть дубликат файлисточник
Вариация ответа Андерсона-м-гомеса. Используя Bash, я бы просто посетил каталоги:
Затем я бы использовал переменную $ OLDPWD, которая указывает на предыдущий каталог:
Если вы хотите посетить каталоги в обратном порядке, то:
источник
$OLDPWD
содержит пробелы, это ломается. Также я всегда пользуюсьcp -a
. Также, к сожалению, завершение табуляции нарушается при расширении переменных. Вы можете использовать ctrl-alt-e для расширения текущей командной строки, однако после ввода части $ OLDPWD.~-
это сокращение для$OLDPWD
Если бы в bash, я бы использовал pushd и popd . Эти команды хранят удобный каталог FIFO для последующего использования. Вы можете обратиться к стеку в любое время, используя каталоги .
Как таковой я бы сделал:
источник
Вы можете использовать
xclip
:Пример:
Также посетите xsel .
источник
tar | gzip
в / из X буфера обмена. В некотором смысле неуклюжий по сравнениюcp
и не обобщающий создание символических или жестких ссылок. (cp -as
илиcp -al
)Вы можете проверить
clipboard-files
скрипт здесь: https://github.com/larspontoppidan/clipboard-filesОн обеспечивает такие команды , как
ccopy
,ccut
иcpaste
что использовать окружение рабочего стола буфер обмена и позволяет интуитивное копировать / вставить файлов:Поскольку используется буфер обмена среды рабочего стола, копирование / вставка будет взаимодействовать с файлами, помещенными в буфер обмена в других программах, таких как файловые менеджеры и IDE. По крайней мере, это работает на Gnome-подобных рабочих столах.
Полное раскрытие, я написал сценарий после того, как бросил находить что-то подобное там ...
источник