использование терминала для копирования файла в буфер обмена

Я получил файл на рабочем столе, имя файла - ded.html. Чтобы скопировать файл, нажмите файл и нажмите cmd + c.

Теперь, как я могу сделать то же самое с помощью терминала?

121 голос | спросил angry kiwi 5 J0000006Europe/Moscow 2011, 11:55:11

8 ответов


186

Если я правильно понимаю вопрос, то что вам нужно, это pbcopy и pbpaste.

Откройте терминал и выполните:

$ cat ~/Desktop/ded.html | pbcopy

Теперь этот файл находится в буфере обмена.

Чтобы поместить его в другое место, то есть вставить его, выполните:

$ pbpaste > ~/Documents/ded.html

Теперь у вас должна быть копия ded.html, сидящего в ~ /Documents.

ответил boehj 5 J0000006Europe/Moscow 2011, 14:33:48
14

Ответ Lri направляется в правильном направлении, но имеет несколько недостатков: нет необходимости использовать Finder (the clipboard является частью StandardAdditions OSAX) и предоставление обработчика run - гораздо более надежный способ передачи аргументов из командной строки (с 10.4). Выполнение обоих этих изменений значительно упрощает «экранирование», которое необходимо выполнить для ввода программы в оболочку.

Вот моя версия (завернутая в функцию оболочки), вы можете поместить это в (например) свой .bashrc, чтобы сделать его доступным в своих оболочках):

file-to-clipboard() {
    osascript \
        -e 'on run args' \
        -e 'set the clipboard to POSIX file (first item of args)' \
        -e end \
        "[email protected]"
}

file-to-clipboard ~/Desktop/ded.html

Файл, который был помещен в буфер обмена с этим скриптом, затем можно вставить в Finder , чтобы скопировать файл в другую папку.

osascript также может использоваться как интерпретатор хеширования (с 10.5). Поместите это в файл (например, file-to-clipboard)

#!/usr/bin/osascript
on run args
  set the clipboard to POSIX file (first item of args)
end

Сделайте исполняемый файл (chmod +x /path/to/where/ever/you/put/file-to-clipboard). Затем запустите его так:

/path/to/where/ever/you/put/file-to-clipboard ~/Desktop/ded.html

Если он хранится в каталоге в PATH, вы можете опустить путь к файлу «.script».

ответил Chris Johnsen 8 J0000006Europe/Moscow 2011, 07:44:41
6

Невозможно достичь того, что вы пытаетесь сделать, используя командную строку. Хотя Apple предлагает инструменты pbcopy и pbpaste, чтобы разрешить базовое копирование текста, вы не можете использовать эти инструменты для копирования файла в том смысле, который вы ищете.

Не вдаваясь в слишком много технических деталей, когда вы копируете файл в Finder с помощью âŒ~ C , вы фактически не копируете сам файл , просто делая ссылку на файл в буфере обмена и отмечая его как ссылку на файл. Когда приложение получает эту ссылку при вставке, она несет ответственность за сортировку, выяснение того, что вы вставили, и, в конечном счете, работу с файлом по своему усмотрению. По сути, когда вы копируете файл в Finder, он сохраняет путь к файлу определенным образом в определенный буфер обмена, и когда вы вставляете его, он получает этот путь к файлу и знает, как создать новый файл, используя содержимое старый (скопируйте файл в буфер обмена, удалите его, попробуйте вставить его в другое место и посмотрите, что произойдет, например).

В этом смысле копирования и вставки доступных инструментов недостаточно, чтобы делать то, что вам нужно. Как предложил boehj, вы можете попытаться скопировать содержимое старого файла в новый, но это будет хорошо работать только для текстовых файлов. Любые двоичные файлы, которые вы получите, будут повреждены (попробуйте сделать это с изображением - он будет поврежден).

Традиционная командная строка не позволит вам таким образом, но вы можете взглянуть, если хотите сделать это в AppleScript, а затем вызвать это через командную строку с помощью osascript.

ответил Itai Ferber 5 J0000006Europe/Moscow 2011, 15:49:43
3

Изменить: этот скрипт теперь использует обработчик запуска и не полагается на Finder. Я также добавил хак, чтобы он работал с относительными путями.

copy() {
    osascript - "[email protected]" <<'END' 2> /dev/null
on run {a}
set the clipboard to POSIX file (POSIX path of ((POSIX file a) as alias))
end
END
}

Я не знаю никакого способа скопировать несколько файлов хотя.

Когда относительный путь преобразуется в псевдоним, появляется предупреждение, подобное CFURLGetFSRef was passed this URL which has no scheme в 10.8. Его можно просто игнорировать, поэтому сценарий перенаправляет STDERR.

ответил user495470 7 J0000006Europe/Moscow 2011, 16:46:01
2

Чтобы скопировать файл в пункт назначения, используйте команду cp.

cp /path/to/file /path/to/destination

Для получения дополнительной информации см. man cp.

ответил Graham 5 J0000006Europe/Moscow 2011, 12:00:27
1

Вот простой сценарий Shell /Bash. Просто вставьте его в свой .bashrc файл (или тому подобное):

file-to-clipboard() {
    if [ -z "$1" ]; then
        echo "file path/name:"
        read FILE
    else
        FILE="$1"
    fi
    pbcopy < "$FILE"
}
ответил blizzrdof77 4 MarpmTue, 04 Mar 2014 14:02:58 +04002014-03-04T14:02:58+04:0002 2014, 14:02:58
1

Выполнение pbcopy < filename в терминале копирует содержимое файла с именем filename.

ответил shinxg 12 PMpThu, 12 Apr 2018 16:59:55 +030059Thursday 2018, 16:59:55
-2

Вы можете использовать файл cat 'originfile'> «файл назначения» в средах unix;

скопировать исходный файл целевого файла в окна.

ответил Allan Felipe Murara 7 Jam1000000amSun, 07 Jan 2018 00:06:02 +030018 2018, 00:06:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132