Это отлично подходит для работы с текстовыми файлами, но потерпит неудачу при попытке выполнить задачу с помощью двоичных файлов. Попробуйте это с изображением, чтобы понять, что я имею в виду.
Итай Фербер
7
после ввода $ cat ~ / Desktop / ded.html | pbcopy Я не могу использовать cmd + v для вставки файла. Althought $ pbpaste> ~ / Documents / ded.html сделал свою работу.
злой киви
Вы также можете просмотреть содержимое файла в буфере обмена OSX, перейдя в меню Finder « Правка»> «Показать буфер обмена» (протестировано в Yosemite).
Даннид
Спасибо, есть идеи, как я прочитал это и передал это следующей команде? например cat ~/.emulator_console_auth_token | auth <read_content>?
Доминик
Это копирует содержимое файла, но не сам файл.
vy32
20
Ответ Лри направлен в правильном направлении, но у него есть пара недостатков: нет необходимости использовать Finder ( the clipboardявляется частью OSAX StandardAdditions ), а предоставление 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 \"$@"}
file-to-clipboard ~/Desktop/ded.html
Файл, который был помещен в буфер обмена с помощью этого сценария, затем можно вставить в Finder, чтобы скопировать файл в другую папку.
osascript также может использоваться в качестве интерпретатора hash-bang (начиная с 10.5). Поместите это в файл (например file-to-clipboard)
#!/usr/bin/osascript
on run argsset the clipboard to POSIX file (first item of args)
end
Сделайте файл исполняемым ( chmod +x /path/to/where/ever/you/put/file-to-clipboard). Затем запустите его так:
@Lri: Finder не понимает очевидного set the clipboard to {one,two}(хотя другая программа AppleScript может успешно извлечь список). В StandardAdditions буфер команды могут быть ограничены отдельными деталями.
Крис Джонсен
1
Будет ли это работать для нескольких файлов?
VitalyB
Примечание. Указанный путь должен быть абсолютным путем для работы скрипта.
Лев
8
Нет способа достичь того, что вы пытаетесь сделать, используя командную строку. Хотя Apple предлагает pbcopyи pbpasteинструменты , чтобы основное копирование текста, вы не можете использовать эти инструменты , чтобы скопировать файл в том смысле , что вы ищете.
Не вдаваясь в технические подробности, когда вы «копируете» файл в Finder ⌘C, вы на самом деле не копируете сам файл, а просто делаете ссылку на файл в буфере обмена и помечаете его как ссылку на файл. Когда приложение получает эту ссылку при вставке, оно отвечает за сортировку, выяснение того, что вы вставили, и, в конечном счете, за работу с файлом по своему усмотрению. По сути, когда вы копируете файл в Finder, он сохраняет путь к файлу определенным образом в определенном буфере обмена, а при вставке он получает этот путь к файлу и знает, как создать новый файл, используя содержимое файла. старый (скопируйте файл в буфер обмена, удалите его, попробуйте вставить его в другое место и посмотрите, что происходит, например).
В этом смысле копирования и вставки доступных инструментов недостаточно, чтобы делать то, что вам нужно. Как и предположил boehj, вы можете попытаться скопировать содержимое старого файла в новый, но это будет хорошо работать только для текстовых файлов. Любые двоичные файлы, которые вы получите, будут повреждены (попробуйте сделать это с изображением - оно станет поврежденным).
Традиционная командная строка провалит вас таким образом, но вы можете посмотреть, хотите ли вы сделать это в AppleScript, а затем вызвать это через командную строку с помощью osascript.
Вы правы насчет образов и т. Д. Я не думал об этом. Я думаю, что я неправильно понял вопрос, потому что, хотя pbcopyи pbpasteбудет работать с файлом .html, это только потому, что это просто текстовый файл.
Boehj
Нет, вы правильно поняли вопрос, просто вы предполагали, что эти инструменты работают должным образом, а они - нет. Они ошибочны и даже не предназначены для такой работы, хотя Apple плохо справилась с документацией. Если вы наберете pbcopy -help, вы получите непроизводительную NSLog()строку, просто повторяющуюся 'pbcopy -help'. Это помогает быть программистом, чтобы понять это, поэтому я чувствовал, что необходимо вмешаться.
Итай Фербер
1
Да, нет проблем. ;)
Итай Фербер
1
Любой, кто хочет, чтобы pbcopy обратил на себя внимание, может получить бесплатную учетную запись разработчика и сообщить о некоторых ошибках - bugreport.apple.com - без гарантии, что это поможет, но это дает инженерам рычаг, чтобы получить время для работы над этими вещами, если все еще достаточно людей ,
bmike
1
Может ли OP достичь желаемого с помощью AppleScript в CLI?
7
Функция ниже работает только с одним файлом, а не с несколькими файлами. Требуется GNU, readlinkкоторый вы можете установить, запустив brew install findutils.
copy(){ osascript -e{'on run{a}','set the clipboard to posix file a',end} "$(greadlink -f -- "$1")";}
Изменить: я снял tell app "Finder"блок.
Редактировать 2: Возврат к версии, которая поддерживает относительные пути.
clip_img(){
osascript -e 'on run argv' \-e 'set currentDir to do shell script "pwd"' \-e 'set the clipboard to (read POSIX file (POSIX path of (currentDir as text & (first item of argv) )) as JPEG picture)' \-e 'end run'"/$1"# osascript -e 'clipboard info'}
запустить, clip_img path-to-fileчтобы скопировать изображение в буфер обмена, и path-to-fileможет быть относительным. Файл может быть в формате JPEG или PNG.
Ответы:
Если я правильно понял вопрос, то, что вы ищете,
pbcopy
иpbpaste
.Откройте терминал и выполните:
$ cat ~/Desktop/ded.html | pbcopy
Теперь этот файл находится в буфере обмена.
Чтобы поместить его в другое место, то есть вставить его, выполните:
$ pbpaste > ~/Documents/ded.html
Теперь у вас должна быть копия файла ded.html в ~ / Documents.
источник
cat ~/.emulator_console_auth_token | auth <read_content>
?Ответ Лри направлен в правильном направлении, но у него есть пара недостатков: нет необходимости использовать Finder (
the clipboard
является частью OSAX StandardAdditions ), а предоставлениеrun
обработчика является гораздо более надежным способом передачи аргументов из командной строки. (с 10.4). Выполнение обоих этих изменений значительно упрощает «экранирование», которое необходимо выполнить для входа в программу в оболочке.Вот моя версия (обернутая в функцию оболочки - вы можете поместить ее (например, в свою),
.bashrc
чтобы сделать ее доступной в ваших оболочках):Файл, который был помещен в буфер обмена с помощью этого сценария, затем можно вставить в Finder, чтобы скопировать файл в другую папку.
osascript также может использоваться в качестве интерпретатора hash-bang (начиная с 10.5). Поместите это в файл (например
file-to-clipboard
)Сделайте файл исполняемым (
chmod +x /path/to/where/ever/you/put/file-to-clipboard
). Затем запустите его так:Если он хранится в каталоге в PATH, вы можете пропустить путь к файлу «script».
источник
set the clipboard to {one,two}
(хотя другая программа AppleScript может успешно извлечь список). В StandardAdditions буфер команды могут быть ограничены отдельными деталями.Нет способа достичь того, что вы пытаетесь сделать, используя командную строку. Хотя Apple предлагает
pbcopy
иpbpaste
инструменты , чтобы основное копирование текста, вы не можете использовать эти инструменты , чтобы скопировать файл в том смысле , что вы ищете.Не вдаваясь в технические подробности, когда вы «копируете» файл в Finder ⌘C, вы на самом деле не копируете сам файл, а просто делаете ссылку на файл в буфере обмена и помечаете его как ссылку на файл. Когда приложение получает эту ссылку при вставке, оно отвечает за сортировку, выяснение того, что вы вставили, и, в конечном счете, за работу с файлом по своему усмотрению. По сути, когда вы копируете файл в Finder, он сохраняет путь к файлу определенным образом в определенном буфере обмена, а при вставке он получает этот путь к файлу и знает, как создать новый файл, используя содержимое файла. старый (скопируйте файл в буфер обмена, удалите его, попробуйте вставить его в другое место и посмотрите, что происходит, например).
В этом смысле копирования и вставки доступных инструментов недостаточно, чтобы делать то, что вам нужно. Как и предположил boehj, вы можете попытаться скопировать содержимое старого файла в новый, но это будет хорошо работать только для текстовых файлов. Любые двоичные файлы, которые вы получите, будут повреждены (попробуйте сделать это с изображением - оно станет поврежденным).
Традиционная командная строка провалит вас таким образом, но вы можете посмотреть, хотите ли вы сделать это в AppleScript, а затем вызвать это через командную строку с помощью
osascript
.источник
pbcopy
иpbpaste
будет работать с файлом .html, это только потому, что это просто текстовый файл.pbcopy -help
, вы получите непроизводительнуюNSLog()
строку, просто повторяющуюся'pbcopy -help'
. Это помогает быть программистом, чтобы понять это, поэтому я чувствовал, что необходимо вмешаться.Функция ниже работает только с одним файлом, а не с несколькими файлами. Требуется GNU,
readlink
который вы можете установить, запустивbrew install findutils
.Изменить: я снял
tell app "Finder"
блок.Редактировать 2: Возврат к версии, которая поддерживает относительные пути.
источник
Выполнение
pbcopy < filename
команды в Терминале копирует содержимое файла с именемfilename
.источник
Чтобы скопировать файл в место назначения, используйте
cp
команду.Смотрите
man cp
для получения дополнительной информации.источник
Вот простой скрипт Shell / Bash. Просто вставьте его в свой
.bashrc
файл (или тому подобное):источник
С поддержкой относительного файла:
запустить,
clip_img path-to-file
чтобы скопировать изображение в буфер обмена, иpath-to-file
может быть относительным. Файл может быть в формате JPEG или PNG.источник
Вы можете использовать cat 'originfile'> 'destinationfile' в среде unix;
скопировать файл оригинала на Windows.
источник