C'est très bien pour travailler avec des fichiers texte, mais cela échouera si vous essayez d'exécuter la tâche avec des fichiers binaires. Essayez ceci avec une image pour voir ce que je veux dire.
Itai Ferber
7
après avoir tapé $ cat ~ / Desktop / ded.html | pbcopy je ne peux pas utiliser cmd + v pour coller le fichier. Althought $ pbpaste> ~ / Documents / ded.html a fait le travail.
Kiwi en colère
Vous pouvez également afficher le contenu du fichier dans votre presse-papiers OSX en passant par le menu Finder Edition> Afficher le presse-papiers (testé dans Yosemite).
Dannid
Merci, avez-vous une idée de la façon dont je l'ai lu et transmis à la commande suivante? par exemple cat ~/.emulator_console_auth_token | auth <read_content>?
Dominic
Cela copie le contenu du fichier, mais pas le fichier lui-même.
vy32
20
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 Finder ( the clipboardfait partie de StandardAdditions OSAX) et donner un rungestionnaire est un moyen beaucoup plus fiable de passer des arguments depuis la ligne de commande. (depuis 10.4). Ces deux modifications simplifient grandement les «échappées» nécessaires pour entrer dans le programme dans un shell.
Voici ma version (encapsulée dans une fonction shell - vous pouvez l'insérer dans (par exemple, votre .bashrcpour la 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é placé dans le Presse-papiers avec ce script peut ensuite être collé dans le Finder pour copier le fichier dans un autre dossier.
osascript peut également être utilisé comme interprète de hash-bang (à partir de 10.5). Mettre ceci dans un fichier (par exemple file-to-clipboard)
#!/usr/bin/osascript
on run argsset 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 lancez-le comme ceci:
@Lri: le 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). Les commandes du Presse-papiers StandardAdditions peuvent être limitées à des éléments uniques.
Chris Johnsen
1
Cela fonctionnerait-il pour plusieurs fichiers?
VitalyB
Remarque: Le chemin indiqué doit être un chemin absolu pour que le script fonctionne.
Leo
8
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 les outils pbcopyet pbpastepermettant la copie de base de texte, vous ne pouvez pas utiliser ces outils pour copier un fichier dans le sens que vous recherchez.
Sans trop entrer dans les détails techniques, lorsque vous "copiez" un fichier dans le Finder en utilisant ⌘C, vous ne copiez pas 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 lorsque vous la collez, elle a la responsabilité de trier les éléments, de déterminer ce que vous avez collé et, en définitive, de travailler avec le fichier à votre guise. En substance, lorsque vous copiez un fichier dans le Finder, il enregistre le chemin du fichier d’une certaine manière vers un certain presse-papiers, et lorsque vous collez, il reçoit ce chemin et sait créer un nouveau fichier en utilisant le contenu du fichier. ancien (copiez un fichier dans le presse-papiers, supprimez-le, essayez de le coller ailleurs et voyez ce qui se passe, par exemple).
Dans ce sens de copier-coller, les outils disponibles ne suffisent pas pour faire ce dont vous avez besoin. Comme suggéré par boehj, vous pouvez essayer de copier le contenu de l'ancien fichier dans un nouveau, mais cela ne fonctionnera que pour les fichiers texte. Tous les fichiers binaires que vous obtiendrez seront corrompus (essayez de le faire avec une image - elle sera corrompue).
La ligne de commande traditionnelle vous échouera de cette manière, mais vous pouvez jeter un coup d'œil si vous souhaitez le faire dans AppleScript, puis l'invoquer via la ligne de commande avec osascript.
Vous avez raison en ce qui concerne les images, etc. Je n'y ai pas pensé. Je suppose que j'ai mal compris la question, car même si pbcopyet pbpastefonctionnera avec un fichier .html, c'est uniquement parce qu'il se trouve qu'il s'agit simplement d'un fichier texte.
Boehj
Non, vous avez bien compris la question, vous avez simplement supposé que ces outils fonctionnaient comme ils le devraient, ce qu'ils ne font pas. Ils sont buggés et ne sont même pas censés fonctionner de cette façon, même si Apple a fait un travail vraiment médiocre en matière de documentation. Si vous tapez pbcopy -help, vous obtenez une NSLog()ligne ne répétant pas la production 'pbcopy -help'. C’est bien pour un programmeur de comprendre cela, c’est pourquoi j’ai jugé nécessaire d’intervenir.
Itai Ferber Le
1
Oui, pas de problème. ;)
Itai Ferber
1
Quiconque souhaite attirer l'attention de pbcopy peut obtenir un compte développeur gratuit et archiver quelques bogues - bugreport.apple.com - rien ne garantit que cela aidera, mais cela donne aux ingénieurs suffisamment de temps pour travailler sur ces éléments si suffisamment de personnes sont concernées. .
bmike
1
Est-ce que l'OP peut réaliser ce qu'il veut avec AppleScript sur la CLI?
7
La fonction ci-dessous ne fonctionne qu'avec un seul fichier et non avec plusieurs fichiers. Il nécessite GNU readlinkque 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 supprimé le tell app "Finder"bloc.
Edit 2: Revenez à une version qui prend en charge les chemins relatifs.
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'}
exécuter clip_img path-to-filepour copier l'image dans le presse-papier, et path-to-filepourrait être relatif. Le fichier peut être un fichier jpeg ou png.
Réponses:
Si je comprends bien la question, ce que vous recherchez est
pbcopy
etpbpaste
.Ouvrez un terminal et faites:
$ cat ~/Desktop/ded.html | pbcopy
Maintenant, ce fichier est dans le presse-papier.
Pour le mettre ailleurs, c'est-à-dire pour le coller, faites:
$ pbpaste > ~/Documents/ded.html
Vous devriez maintenant avoir une copie de ded.html dans ~ / Documents.
la source
cat ~/.emulator_console_auth_token | auth <read_content>
?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 Finder (
the clipboard
fait partie de StandardAdditions OSAX) et donner unrun
gestionnaire est un moyen beaucoup plus fiable de passer des arguments depuis la ligne de commande. (depuis 10.4). Ces deux modifications simplifient grandement les «échappées» nécessaires pour entrer dans le programme dans un shell.Voici ma version (encapsulée dans une fonction shell - vous pouvez l'insérer dans (par exemple, votre
.bashrc
pour la rendre disponible dans vos shells)):Un fichier qui a été placé dans le Presse-papiers avec ce script peut ensuite être collé dans le Finder pour copier le fichier dans un autre dossier.
osascript peut également être utilisé comme interprète de hash-bang (à partir de 10.5). Mettre ceci dans un fichier (par exemple
file-to-clipboard
)Rendre le fichier exécutable (
chmod +x /path/to/where/ever/you/put/file-to-clipboard
). Puis lancez-le comme ceci:S'il est stocké dans un répertoire du chemin PATH, vous pouvez omettre le chemin du fichier «script».
la source
set the clipboard to {one,two}
(bien qu'un autre programme AppleScript puisse extraire la liste avec succès). Les commandes du Presse-papiers StandardAdditions peuvent être limitées à des éléments uniques.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 les outils
pbcopy
etpbpaste
permettant la copie de base de texte, vous ne pouvez pas utiliser ces outils pour copier un fichier dans le sens que vous recherchez.Sans trop entrer dans les détails techniques, lorsque vous "copiez" un fichier dans le Finder en utilisant ⌘C, vous ne copiez pas 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 lorsque vous la collez, elle a la responsabilité de trier les éléments, de déterminer ce que vous avez collé et, en définitive, de travailler avec le fichier à votre guise. En substance, lorsque vous copiez un fichier dans le Finder, il enregistre le chemin du fichier d’une certaine manière vers un certain presse-papiers, et lorsque vous collez, il reçoit ce chemin et sait créer un nouveau fichier en utilisant le contenu du fichier. ancien (copiez un fichier dans le presse-papiers, supprimez-le, essayez de le coller ailleurs et voyez ce qui se passe, par exemple).
Dans ce sens de copier-coller, les outils disponibles ne suffisent pas pour faire ce dont vous avez besoin. Comme suggéré par boehj, vous pouvez essayer de copier le contenu de l'ancien fichier dans un nouveau, mais cela ne fonctionnera que pour les fichiers texte. Tous les fichiers binaires que vous obtiendrez seront corrompus (essayez de le faire avec une image - elle sera corrompue).
La ligne de commande traditionnelle vous échouera de cette manière, mais vous pouvez jeter un coup d'œil si vous souhaitez le faire dans AppleScript, puis l'invoquer via la ligne de commande avec
osascript
.la source
pbcopy
etpbpaste
fonctionnera avec un fichier .html, c'est uniquement parce qu'il se trouve qu'il s'agit simplement d'un fichier texte.pbcopy -help
, vous obtenez uneNSLog()
ligne ne répétant pas la production'pbcopy -help'
. C’est bien pour un programmeur de comprendre cela, c’est pourquoi j’ai jugé nécessaire d’intervenir.La fonction ci-dessous ne fonctionne qu'avec un seul fichier et non avec plusieurs fichiers. Il nécessite GNU
readlink
que vous pouvez installer en exécutantbrew install findutils
.Edit: j'ai supprimé le
tell app "Finder"
bloc.Edit 2: Revenez à une version qui prend en charge les chemins relatifs.
la source
L'exécution de la
pbcopy < filename
commande dans le terminal copie le contenu du fichier nomméfilename
.la source
Pour copier un fichier dans une destination, utilisez la
cp
commande.Voir
man cp
pour plus d'informations.la source
Voici un script Shell / Bash simple. Il suffit de le coller dans votre
.bashrc
fichier (ou similaire):la source
Avec support de fichier relatif:
exécuter
clip_img path-to-file
pour copier l'image dans le presse-papier, etpath-to-file
pourrait être relatif. Le fichier peut être un fichier jpeg ou png.la source
Vous pouvez utiliser cat 'originfile'> 'destinationfile' sur les environnements Unix;
copier le fichier de destination du fichier d'origine sur Windows.
la source