usando el terminal para copiar un archivo al portapapeles

136

Tengo un archivo en el escritorio, el nombre del archivo es ded.html. Para copiar el archivo, hago clic en el archivo y presiono cmd + c.

Ahora, ¿cómo haría lo mismo con el terminal?

    
pregunta angry kiwi 05.06.2011 - 09:55

8 respuestas

205

Si entiendo bien la pregunta, lo que estás buscando es pbcopy y pbpaste .

Abre una terminal y haz:

$ cat ~/Desktop/ded.html | pbcopy

Ahora ese archivo está en el portapapeles.

Para ponerlo en otro lugar, es decir, para pegarlo, haz:

$ pbpaste > ~/Documents/ded.html

Ahora debería tener una copia de ded.html en ~ / Documentos.

    
respondido por el boehj 05.06.2011 - 12:33
16

La respuesta de Lri es Dirigido en la dirección correcta, pero tiene un par de fallas: no hay necesidad de utilizar Finder ( the clipboard es parte de StandardAdditions OSAX), y le da un run handler es una forma mucho más confiable de pasar argumentos desde la línea de comandos (desde 10.4). La realización de estos dos cambios simplifica en gran medida 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):

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 en otra carpeta.

osascript también se puede usar como un intérprete de hash-bang (desde la 10.5). Pon 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

Haz el archivo ejecutable ( chmod +x /path/to/where/ever/you/put/file-to-clipboard ). Entonces ejecútalo así:

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

Si está almacenado en un directorio en la RUTA, puede omitir la ruta al archivo del "script".

    
respondido por el Chris Johnsen 08.06.2011 - 05:44
6

No hay forma de lograr lo que está tratando de hacer usando la línea de comandos. Si bien Apple ofrece las herramientas pbcopy y pbpaste para permitir la copia básica de texto, no puedes usar estas herramientas para copiar un archivo en el sentido que estás buscando.

Sin entrar en demasiados detalles técnicos, cuando 'copia' un archivo en el Finder usando ⌘ < C , en realidad no está copiando el archivo en sí. simplemente haciendo una referencia al archivo en el portapapeles y marcándolo como una referencia de archivo. Cuando una aplicación recibe esta referencia cuando la pega, tiene la responsabilidad de ordenar las cosas, averiguar qué ha pegado y, en última instancia, trabajar con el archivo como le parezca. En esencia, cuando copia un archivo en el Finder, guarda la ruta del archivo de cierta manera a un determinado portapapeles, y cuando pega, recibe esa ruta del archivo y sabe cómo crear un nuevo archivo utilizando el contenido del archivo. antiguo (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. Todos los archivos binarios que obtenga se corromperán (intente hacer esto con una imagen, se corromperá).

La línea de comando tradicional te fallará de esta manera, pero puedes echarle un vistazo si quieres hacer esto en AppleScript, luego invocarlo a través de la línea de comando con osascript .

    
respondido por el Itai Ferber 05.06.2011 - 13:49
5

Editar: esta secuencia de comandos ahora usa un controlador de ejecución y no se basa en el Finder. También agregué un truco para que funcione con rutas relativas.

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

No conozco ninguna forma de copiar varios archivos .

Cuando una ruta relativa se convierte en un alias, hay una advertencia como CFURLGetFSRef was passed this URL which has no scheme en 10.8. Solo se puede ignorar, por lo que el script redirige STDERR.

    
respondido por el user495470 07.06.2011 - 14:46
2

Para copiar un archivo a un destino, use el comando cp .

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

Consulte man cp para obtener más información.

    
respondido por el Graham 05.06.2011 - 10:00
2

Al ejecutar el comando pbcopy < filename en la Terminal, se copia el contenido del archivo denominado filename .

    
respondido por el shinxg 12.04.2018 - 15:59
1

Aquí hay un simple script Shell / Bash. Solo péguelo en su archivo .bashrc (o similar):

file-to-clipboard() {
    if [ -z "$1" ]; then
        echo "file path/name:"
        read FILE
    else
        FILE="$1"
    fi
    pbcopy < "$FILE"
}
    
respondido por el blizzrdof77 04.03.2014 - 11:02
-2

Puedes usar cat 'originfile' > 'destinationfile' en entornos unix;

copie el archivo de origen del archivo de origen en windows.

    
respondido por el Allan Felipe Murara 06.01.2018 - 22:06

Lea otras preguntas en las etiquetas