275 votes

Comment utiliser le terminal pour copier un fichier dans le presse-papiers ?

J'ai un fichier sur le bureau, le nom du fichier est ded.html. Pour copier le fichier, je clique sur le fichier et j'appuie sur cmd+c.

Maintenant, comment puis-je faire la même chose en utilisant le terminal ?

4 votes

Voulez-vous dire copier le fichier ou copier le contenu du fichier afin de pouvoir coller le contenu ?

1 votes

397voto

boehj Points 5109

Si je comprends bien la question, ce que vous cherchez est pbcopy y pbpaste .

Ouvrez un terminal et exécutez :

cat ~/Desktop/ded.html | pbcopy

Le fichier est maintenant dans votre presse-papiers.

Pour le mettre ailleurs (c'est-à-dire le coller), exécutez :

pbpaste > ~/Documents/ded.html

Vous devriez maintenant avoir une copie de ded.html dans ~/Documents.

9 votes

Cette méthode est idéale pour travailler avec des fichiers texte, mais elle échouera si vous essayez d'effectuer cette tâche avec des binaires. Essayez de le faire avec une image pour voir ce que je veux dire.

9 votes

Après avoir tapé $ cat ~/Desktop/ded.html | pbcopy je ne peux pas utiliser cmd+v pour coller le fichier. Pourtant, $ pbpaste > ~/Documents/ded.html a fait l'affaire.

4 votes

Vous pouvez également visualiser le contenu du fichier dans le presse-papiers de votre OSX en passant par le menu Finder Editer > Afficher le presse-papiers (testé dans Yosemite).

33voto

Nip Points 362

La réponse de Lri va dans la bonne direction, mais elle présente quelques défauts : il n'est pas nécessaire d'utiliser la fonction Finder ( the clipboard fait partie de la StandardAdditions OSAX), et donnant un run est un moyen beaucoup plus fiable de passer des arguments depuis la ligne de commande (depuis 10.4). Ces deux changements simplifient grandement l'"échappement" qui doit être fait pour entrer dans le programme dans un shell.

Voici ma version (enveloppée dans une fonction shell - vous pourriez la mettre dans (par exemple) votre .bashrc pour le rendre disponible dans vos 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 fichier qui a été mis dans le presse-papiers avec ce script peut alors être collé dans Finder pour copier le fichier dans un autre dossier.

osascript peut aussi être utilisé comme interpréteur de hash-bang (depuis 10.5). Mettez cela dans un fichier (par exemple file-to-clipboard )

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

Rendre le fichier exécutable ( chmod +x /path/to/where/ever/you/put/file-to-clipboard ). Puis exécutez-le comme suit :

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

S'il est stocké dans un répertoire dans le PATH, alors vous pouvez omettre le chemin vers le fichier "script".

0 votes

@Lri : Finder ne comprend pas l'évidence set the clipboard to {one,two} (bien qu'un autre programme AppleScript puisse extraire la liste avec succès). Le site StandardAdditions Les commandes du presse-papiers peuvent être limitées à des éléments uniques.

1 votes

Cela fonctionnerait-il pour plusieurs fichiers ?

3 votes

Note : Le chemin donné doit être un chemin absolu pour que le script fonctionne.

14voto

saturngod Points 179

Il n'y a aucun moyen de réaliser ce que vous essayez de faire en utilisant la ligne de commande. Bien qu'Apple propose le pbcopy y pbpaste pour permettre la copie de base de texte, vous ne pouvez pas utiliser ces outils pour copier un fichier au sens où vous l'entendez.

Sans entrer dans les détails techniques, lorsque vous "copiez" un fichier dans le Finder à l'aide de la commande C vous ne copiez pas réellement le fichier lui-même, vous faites simplement référence au fichier dans le presse-papiers et vous le marquez comme une référence de fichier. Lorsqu'une application reçoit cette référence lors du collage, elle a la responsabilité de faire le tri, de comprendre ce que vous avez collé et, finalement, de travailler avec le fichier comme bon lui semble. En substance, lorsque vous copiez un fichier dans le Finder, il enregistre le chemin d'accès au fichier d'une certaine manière dans un certain presse-papiers, et lorsque vous collez, il reçoit ce chemin d'accès et sait qu'il doit créer un nouveau fichier en utilisant le contenu de l'ancien (copier un fichier dans le presse-papiers, le supprimer, essayer de le coller ailleurs et voir ce qui se passe, par exemple).

Dans ce sens du copier-coller, les outils disponibles à portée de main ne sont pas suffisants pour faire ce dont vous avez besoin. Comme boehj l'a suggéré, vous pouvez essayer de copier le contenu de l'ancien fichier dans le nouveau, mais cela ne fonctionne bien que pour les fichiers texte. Tout fichier binaire que vous obtiendrez sera corrompu (essayez de faire cela avec une image - elle devient corrompue).

La ligne de commande traditionnelle vous fera échouer de cette manière, mais vous pouvez, si vous le souhaitez, envisager de faire cela en AppleScript, puis de l'invoquer via la ligne de commande avec osascript .

0 votes

Vous avez raison pour les images, etc. Je n'y avais pas pensé. Je suppose que j'ai mal compris la question, car bien que pbcopy y pbpaste fonctionnera avec un fichier .html, mais c'est uniquement parce qu'il s'agit d'un fichier texte.

0 votes

Non, vous avez compris la question correctement, c'est juste que vous avez supposé que ces outils fonctionnaient comme ils le devaient, ce qui n'est pas le cas. Ils sont bogués, et ne sont même pas censés fonctionner de cette façon, bien qu'Apple ait fait un très mauvais travail de documentation. Si vous tapez pbcopy -help vous obtiendrez une version non valable pour la production NSLog() ligne qui ne fait que répéter 'pbcopy -help' . Il faut être un programmeur pour comprendre cela, c'est pourquoi j'ai jugé nécessaire d'intervenir.

0 votes

Wow, c'est du travail très bâclé. Je n'ai jamais fait pbcopy -help avant. man pbcopy n'est pas très complet non plus, maintenant que j'y ai jeté un œil. Merci de m'avoir fait remarquer ces choses.

14voto

shinxg Points 201

Exécuter pbcopy < filename dans le Terminal copie le contenu du fichier nommé filename .

1 votes

10x plus facile que la réponse acceptée

2 votes

Oui, mais comme mentionné, cela ne fonctionne pas pour les images ou les binaires.

13voto

La fonction ci-dessous ne fonctionne qu'avec un seul fichier et non avec plusieurs fichiers. Elle nécessite GNU readlink que vous pouvez installer en exécutant brew install findutils .

copy(){ osascript -e{'on run{a}','set the clipboard to posix file a',end} "$(greadlink -f -- "$1")";}

Edit : J'ai enlevé le tell app "Finder" bloc.

Edit 2 : Retour à une version qui supporte les chemins relatifs.

2 votes

Celui-ci fonctionne vraiment !

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X