Esto es ideal para trabajar con archivos de texto, pero fallará cuando intente realizar la tarea con binarios. Pruebe esto con una imagen para ver a qué me refiero.
Itai Ferber
77
después de escribir $ cat ~ / Desktop / ded.html | pbcopy No puedo usar cmd + v para pegar el archivo. Aunque $ pbpaste> ~ / Documents / ded.html hizo el trabajo.
Kiwi enojado
También puede ver el contenido del archivo en su portapapeles OSX yendo a través del menú Finder Editar> Mostrar portapapeles (probado en Yosemite).
Dannid
Gracias, ¿alguna idea de cómo lo leo y paso eso al siguiente comando? por ejemplo cat ~/.emulator_console_auth_token | auth <read_content>?
Dominic
Esto copia el contenido del archivo, pero no el archivo en sí.
vy32
20
La respuesta de Lri se dirige en la dirección correcta, pero tiene un par de fallas: no es necesario usar Finder ( the clipboardes parte del StandardAdditions OSAX), y dar un runcontrolador es una forma mucho más confiable de pasar argumentos desde la línea de comandos (desde 10.4). Realizar ambos cambios simplifica enormemente el "escape" que se debe hacer para ingresar al programa en un shell.
Aquí está mi versión (envuelta en una función de shell; puede poner esto en (por ejemplo) su .bashrcpara que esté disponible en sus shells):
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
Un archivo que se ha colocado en el portapapeles con este script se puede pegar en Finder para copiar el archivo a otra carpeta.
osascript también se puede usar como intérprete de hash-bang (desde 10.5). Ponga esto en un archivo (por ejemplo file-to-clipboard)
#!/usr/bin/osascript
on run args
set the clipboard to POSIX file (first item of args)
end
Hacer el archivo ejecutable ( chmod +x /path/to/where/ever/you/put/file-to-clipboard). Luego ejecútelo así:
@Lri: Finder no entiende lo obvio set the clipboard to {one,two}(aunque otro programa AppleScript puede extraer la lista con éxito). Los comandos del portapapeles StandardAdditions pueden estar limitados a elementos individuales.
Chris Johnsen
1
¿Funcionaría para múltiples archivos?
VitalyB
Nota: La ruta dada debe ser una ruta absoluta para que el script funcione.
Leo
8
No hay forma de lograr lo que intenta hacer con la línea de comando. Si bien Apple ofrece las herramientas pbcopyy pbpastepara permitir la copia básica de texto, no puede usar estas herramientas para copiar un archivo en el sentido que está buscando.
Sin entrar en demasiados detalles técnicos, cuando 'copia' un archivo en el Finder utilizando ⌘C, en realidad no está copiando el archivo en sí mismo, solo haciendo referencia al archivo en el portapapeles y marcándolo como referencia de archivo. Cuando una aplicación recibe esta referencia cuando la pega, tiene la responsabilidad de ordenar las cosas, averiguar lo que pegó y, en última instancia, trabajar con el archivo como mejor le parezca. En esencia, cuando copia un archivo en el Finder, guarda la ruta del archivo de cierta manera en un portapapeles determinado, y cuando pega, recibe esa ruta de archivo y sabe crear un nuevo archivo utilizando el contenido del archivo. anterior (copie un archivo en el portapapeles, elimínelo, intente pegarlo en otro lugar y vea qué sucede, por ejemplo).
En este sentido de copiar y pegar, las herramientas disponibles no son suficientes para hacer lo que necesita. Como sugirió boehj, puede intentar copiar el contenido del archivo antiguo en uno nuevo, pero esto solo funcionará bien para archivos de texto. Cualquier archivo binario que obtenga se dañará (intente hacer esto con una imagen; se corrompe).
La línea de comando tradicional le fallará de esta manera, pero puede echar un vistazo si desea hacerlo en AppleScript, luego invocarlo a través de la línea de comando con osascript.
Tienes razón sobre las imágenes, etc. No pensé en eso. Creo que he entendido bien la pregunta, porque si bien pbcopyy pbpasteva a trabajar con un archivo .html, eso es sólo porque le pasa a ser un archivo de texto.
boehj
No, entendiste la pregunta correctamente, es solo que asumiste que estas herramientas funcionaron como deberían, y no es así. Tienen errores, y ni siquiera están destinados a funcionar de esa manera, aunque Apple ha hecho un trabajo muy pobre en la documentación. Si escribe pbcopy -help, obtendrá una línea no digna NSLog()de producción que solo se repite 'pbcopy -help'. Es útil ser un programador para entender esto, por eso me pareció necesario intervenir.
Itai Ferber
1
Sí, no hay problema. ;)
Itai Ferber
1
Cualquiera que quiera que pbcopy obtenga atención puede obtener una cuenta de desarrollador gratuita y presentar algunos errores ( bugreport.apple.com) , no hay garantía de que ayude, pero les da a los ingenieros la oportunidad de trabajar en estas cosas si a suficientes personas todavía les importa .
bmike
1
¿Puede el OP lograr lo que quiere con AppleScript en la CLI?
7
La siguiente función solo funciona con un solo archivo y no con varios archivos. Requiere GNU readlinkque puede instalar ejecutando brew install findutils.
copy(){ osascript -e{'on run{a}','set the clipboard to posix file a',end} "$(greadlink -f -- "$1")";}
Editar: eliminé el tell app "Finder"bloque.
Edición 2: se revierte a una versión que admite rutas relativas.
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'}
ejecutar clip_img path-to-filepara copiar la imagen al portapapeles, y path-to-filepodría ser relativo. El archivo puede ser jpeg o png.
Respuestas:
Si entiendo bien la pregunta, lo que buscas es
pbcopy
ypbpaste
.Abra una terminal y haga:
$ cat ~/Desktop/ded.html | pbcopy
Ahora ese archivo está en el portapapeles.
Para ponerlo en otro lugar, es decir, para pegarlo, haga:
$ pbpaste > ~/Documents/ded.html
Ahora debería tener una copia de ded.html en ~ / Documentos.
fuente
cat ~/.emulator_console_auth_token | auth <read_content>
?La respuesta de Lri se dirige en la dirección correcta, pero tiene un par de fallas: no es necesario usar Finder (
the clipboard
es parte del StandardAdditions OSAX), y dar unrun
controlador es una forma mucho más confiable de pasar argumentos desde la línea de comandos (desde 10.4). Realizar ambos cambios simplifica enormemente el "escape" que se debe hacer para ingresar al programa en un shell.Aquí está mi versión (envuelta en una función de shell; puede poner esto en (por ejemplo) su
.bashrc
para que esté disponible en sus shells):Un archivo que se ha colocado en el portapapeles con este script se puede pegar en Finder para copiar el archivo a otra carpeta.
osascript también se puede usar como intérprete de hash-bang (desde 10.5). Ponga esto en un archivo (por ejemplo
file-to-clipboard
)Hacer el archivo ejecutable (
chmod +x /path/to/where/ever/you/put/file-to-clipboard
). Luego ejecútelo así:Si está almacenado en un directorio en la RUTA, puede omitir la ruta al archivo "script".
fuente
set the clipboard to {one,two}
(aunque otro programa AppleScript puede extraer la lista con éxito). Los comandos del portapapeles StandardAdditions pueden estar limitados a elementos individuales.No hay forma de lograr lo que intenta hacer con la línea de comando. Si bien Apple ofrece las herramientas
pbcopy
ypbpaste
para permitir la copia básica de texto, no puede usar estas herramientas para copiar un archivo en el sentido que está buscando.Sin entrar en demasiados detalles técnicos, cuando 'copia' un archivo en el Finder utilizando ⌘C, en realidad no está copiando el archivo en sí mismo, solo haciendo referencia al archivo en el portapapeles y marcándolo como referencia de archivo. Cuando una aplicación recibe esta referencia cuando la pega, tiene la responsabilidad de ordenar las cosas, averiguar lo que pegó y, en última instancia, trabajar con el archivo como mejor le parezca. En esencia, cuando copia un archivo en el Finder, guarda la ruta del archivo de cierta manera en un portapapeles determinado, y cuando pega, recibe esa ruta de archivo y sabe crear un nuevo archivo utilizando el contenido del archivo. anterior (copie un archivo en el portapapeles, elimínelo, intente pegarlo en otro lugar y vea qué sucede, por ejemplo).
En este sentido de copiar y pegar, las herramientas disponibles no son suficientes para hacer lo que necesita. Como sugirió boehj, puede intentar copiar el contenido del archivo antiguo en uno nuevo, pero esto solo funcionará bien para archivos de texto. Cualquier archivo binario que obtenga se dañará (intente hacer esto con una imagen; se corrompe).
La línea de comando tradicional le fallará de esta manera, pero puede echar un vistazo si desea hacerlo en AppleScript, luego invocarlo a través de la línea de comando con
osascript
.fuente
pbcopy
ypbpaste
va a trabajar con un archivo .html, eso es sólo porque le pasa a ser un archivo de texto.pbcopy -help
, obtendrá una línea no dignaNSLog()
de producción que solo se repite'pbcopy -help'
. Es útil ser un programador para entender esto, por eso me pareció necesario intervenir.La siguiente función solo funciona con un solo archivo y no con varios archivos. Requiere GNU
readlink
que puede instalar ejecutandobrew install findutils
.Editar: eliminé el
tell app "Finder"
bloque.Edición 2: se revierte a una versión que admite rutas relativas.
fuente
El
pbcopy < filename
comando de ejecución en la Terminal copia el contenido del archivo nombradofilename
.fuente
Para copiar un archivo a un destino, use el
cp
comando.Ver
man cp
para más información.fuente
Aquí hay un script simple de Shell / Bash. Solo pégalo en tu
.bashrc
archivo (o similar):fuente
Con soporte de archivo relativo:
ejecutar
clip_img path-to-file
para copiar la imagen al portapapeles, ypath-to-file
podría ser relativo. El archivo puede ser jpeg o png.fuente
Puede usar cat 'originfile'> 'destinationfile' en entornos unix;
Copie el archivo de origen archivo de destino en Windows.
fuente