sử dụng thiết bị đầu cuối để sao chép một tập tin vào clipboard


159

Tôi đã nhận được một tệp trên máy tính để bàn, tên tệp làrec.html. Để sao chép tệp, tôi bấm vào tệp và nhấn cmd + c.

Bây giờ làm thế nào tôi sẽ làm điều tương tự bằng cách sử dụng thiết bị đầu cuối?


2
Bạn có nghĩa là sao chép tập tin hoặc sao chép nội dung của tập tin để nội dung có thể được dán?
dùng151019

Câu trả lời:


237

Nếu tôi hiểu đúng câu hỏi, những gì bạn đang theo đuổi là pbcopypbpaste.

Mở một thiết bị đầu cuối và làm:

$ cat ~/Desktop/ded.html | pbcopy

Bây giờ tập tin đó là trong clipboard.

Để đặt nó ở một nơi khác, nghĩa là, để dán nó, hãy làm:

$ pbpaste > ~/Documents/ded.html

Bây giờ bạn nên có một bản sao của.html.html ngồi trong ~ / Tài liệu.


3
Điều này rất tốt để làm việc với các tệp văn bản, nhưng sẽ thất bại khi bạn cố gắng thực hiện tác vụ với nhị phân. Hãy thử điều này với một hình ảnh để xem những gì tôi có ý nghĩa.
Itai Ferber

7
sau khi gõ $ cat ~ / Desktop /rec.html | pbcopy Tôi không thể sử dụng cmd + v để dán tệp. Mặc dù $ pbpaste> ~ / Documents /rec.html đã thực hiện công việc.
kiwi tức giận

Bạn cũng có thể xem nội dung tệp trong bảng tạm OSX của mình bằng cách qua menu Finder Chỉnh sửa> Hiển thị Clipboard (được thử nghiệm trong Yosemite).
Dannid

Cảm ơn, có ý tưởng nào tôi đọc nó và chuyển nó sang lệnh tiếp theo không? ví dụ cat ~/.emulator_console_auth_token | auth <read_content>?
Đaminh

Điều này sao chép nội dung của tệp, nhưng không phải bản thân tệp.
vy32

20

Câu trả lời của Lri đang đi đúng hướng, nhưng nó có một vài sai sót: không cần sử dụng Finder ( the clipboardlà một phần của OSA StandardAdditions ) và đưa ra một runtrình xử lý là cách đáng tin cậy hơn nhiều để truyền các đối số từ dòng lệnh (từ 10,4). Việc thực hiện cả hai thay đổi này giúp đơn giản hóa rất nhiều các chương trình thoát khỏi phạm vi cần phải được thực hiện để vào chương trình trong một trình bao.

Đây là phiên bản của tôi (được bọc trong một hàm shell. Bạn có thể đặt nó vào (ví dụ) của bạn .bashrcđể làm cho nó có sẵn trong các vỏ của bạn):

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

Một tệp đã được đặt vào bảng tạm với tập lệnh này sau đó có thể được dán trong Finder để sao chép tệp vào thư mục khác.

osascript cũng có thể được sử dụng như một trình thông dịch băm (kể từ 10.5). Đặt cái này trong một tập tin (ví dụ file-to-clipboard)

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

Làm cho tập tin thực thi ( chmod +x /path/to/where/ever/you/put/file-to-clipboard). Sau đó chạy nó như vậy:

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

Nếu nó được lưu trữ trong một thư mục trong PATH, thì bạn có thể bỏ qua đường dẫn đến tệp script script.


@Lri: Finder không hiểu rõ ràng set the clipboard to {one,two}(mặc dù một chương trình AppleScript khác có thể trích xuất thành công danh sách). Các lệnh clipboard của StandardAdditions có thể bị giới hạn ở các mục đơn lẻ.
Chris Johnsen

1
Nó sẽ làm việc cho nhiều tập tin?
VitalyB

Lưu ý: Đường dẫn đã cho phải là đường dẫn tuyệt đối để tập lệnh hoạt động.
Leo

8

Không có cách nào để đạt được những gì bạn đang cố gắng thực hiện bằng cách sử dụng dòng lệnh. Mặc dù Apple cung cấp pbcopypbpastecác công cụ để cho phép sao chép văn bản cơ bản, bạn không thể sử dụng các công cụ này để sao chép tệp theo nghĩa bạn đang tìm kiếm.

Không đi sâu vào quá nhiều chi tiết kỹ thuật, khi bạn 'sao chép' một tệp trong Finder bằng cách sử dụng C, bạn không thực sự sao chép chính tệp đó, chỉ tạo một tham chiếu đến tệp trên bảng tạm và đánh dấu nó là một tham chiếu tệp. Khi một ứng dụng nhận được tài liệu tham khảo này khi bạn dán, nó có trách nhiệm sắp xếp mọi thứ, tìm ra những gì bạn đã dán và cuối cùng, làm việc với tệp khi nó thấy phù hợp. Về bản chất, khi bạn sao chép một tệp trong Finder, nó sẽ lưu đường dẫn đến tệp theo một cách nhất định vào một bảng tạm nhất định và khi bạn dán, nó sẽ nhận được đường dẫn tệp đó và biết cách tạo một tệp mới bằng cách sử dụng nội dung của cái cũ (sao chép một tập tin vào bảng tạm, xóa nó, cố gắng dán nó vào một nơi khác và xem điều gì xảy ra, ví dụ).

Theo nghĩa sao chép và dán này, các công cụ có sẵn không đủ để làm những gì bạn cần. Như boehj đã đề xuất, bạn có thể cố gắng sao chép nội dung của tệp cũ sang tệp mới, nhưng điều này sẽ chỉ hoạt động tốt cho các tệp văn bản. Bất kỳ tệp nhị phân nào bạn nhận được sẽ bị hỏng (hãy thử làm điều này với một hình ảnh - nó sẽ bị hỏng).

Dòng lệnh truyền thống sẽ khiến bạn thất bại theo cách này, nhưng bạn có thể xem nếu bạn muốn thực hiện điều này trong AppleScript, sau đó gọi nó thông qua dòng lệnh với osascript.


Bạn nói đúng về hình ảnh, v.v. Tôi không nghĩ về điều đó. Tôi đoán tôi đã hiểu nhầm câu hỏi, bởi vì mặc dù pbcopypbpastesẽ hoạt động với tệp .html, nhưng đó chỉ là vì nó chỉ là một tệp văn bản.
boehj

Không, bạn đã hiểu chính xác câu hỏi, chỉ là bạn cho rằng các công cụ này hoạt động như bình thường, điều mà họ không làm. Chúng là lỗi và thậm chí không có nghĩa là hoạt động theo cách đó, mặc dù Apple đã thực hiện một công việc thực sự kém về tài liệu. Nếu bạn nhập pbcopy -help, bạn nhận được một dòng không xứng đáng sản xuất NSLog()chỉ cần lặp lại 'pbcopy -help'. Nó giúp trở thành một lập trình viên để hiểu điều này, đó là lý do tại sao tôi cảm thấy cần phải hòa nhập.
Itai Ferber

1
Đúng, không vấn đề gì. ;)
Itai Ferber

1
Bất cứ ai muốn pbcopy được chú ý đều có thể có tài khoản nhà phát triển miễn phí và gửi một số lỗi - bugreport.apple.com - không đảm bảo nó sẽ giúp ích, nhưng nó giúp các kỹ sư tận dụng thời gian để xử lý những điều này nếu đủ người vẫn quan tâm .
bmike

1
OP có thể đạt được những gì họ muốn với AppleScript trên CLI không?

7

Hàm bên dưới chỉ hoạt động với một tệp duy nhất chứ không phải với nhiều tệp. Nó yêu cầu GNU readlinkmà bạn có thể cài đặt bằng cách chạy brew install findutils.

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

Chỉnh sửa: Tôi đã xóa tell app "Finder"khối.

Chỉnh sửa 2: Hoàn nguyên về phiên bản hỗ trợ các đường dẫn tương đối.


2
Điều này thực sự hoạt động!
Bemmu

6

pbcopy < filenameLệnh thực thi trong Terminal sao chép nội dung của tệp có tên filename.


3

Để sao chép một tập tin đến một đích, sử dụng cplệnh.

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

Xem man cpđể biết thêm thông tin.


2
Đây không phải là một câu trả lời cho câu hỏi được hỏi mà tham chiếu clipboard là vị trí đích.
kellyfj

2

Đây là một tập lệnh Shell / Bash đơn giản. Chỉ cần dán nó vào .bashrctập tin của bạn (hoặc tương tự):

file-to-clipboard() {
    if [ -z "$1" ]; then
        echo "file path/name:"
        read FILE
    else
        FILE="$1"
    fi
    pbcopy < "$FILE"
}

0

Với sự hỗ trợ của tập tin tương đối:

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'
}

chạy clip_img path-to-fileđể sao chép hình ảnh vào clipboard và path-to-filecó thể là tương đối. Các tập tin có thể là tập tin jpeg hoặc png.


-2

Bạn có thể sử dụng cat 'originfile'> 'Destinationfile' trên các môi trường unix;

sao chép Destinationfile Destinationfile trên windows.


2
Làm thế nào để điều này đặt các tập tin vào clipboard?
grg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.