ใช้ terminal เพื่อคัดลอกไฟล์ไปยังคลิปบอร์ด


159

ฉันได้รับไฟล์บนเดสก์ท็อปชื่อไฟล์คือ ded.html ในการคัดลอกไฟล์ฉันคลิกไฟล์และกด cmd + c

ตอนนี้ฉันจะทำสิ่งเดียวกันโดยใช้ terminal ได้อย่างไร


2
คุณหมายถึงการคัดลอกไฟล์หรือคัดลอกเนื้อหาของไฟล์เพื่อให้สามารถวางเนื้อหาได้หรือไม่
user151019

คำตอบ:


237

ถ้าฉันทำความเข้าใจคำถามที่เหมาะสมสิ่งที่คุณหลังจากมีและpbcopypbpaste

เปิดเทอร์มินัลและทำ:

$ cat ~/Desktop/ded.html | pbcopy

ตอนนี้ไฟล์นั้นอยู่ในคลิปบอร์ด

เมื่อต้องการวางไว้ที่อื่นนั่นคือเพื่อวางให้ทำ:

$ pbpaste > ~/Documents/ded.html

ตอนนี้คุณควรมีสำเนาของ ded.html อยู่ใน ~ / Documents


3
สิ่งนี้ดีมากสำหรับการทำงานกับไฟล์ข้อความ แต่จะล้มเหลวเมื่อคุณพยายามทำงานกับไบนารี ลองใช้ภาพเพื่อดูว่าฉันหมายถึงอะไร
Itai Ferber

7
หลังจากพิมพ์ $ cat ~ / Desktop / ded.html | pbcopy ฉันไม่สามารถใช้ cmd + v เพื่อวางไฟล์ แม้ว่าจะ $ pbpaste> ~ / Documents / ded.html ทำหน้าที่ได้แล้ว
กีวีโกรธ

คุณยังสามารถดูเนื้อหาไฟล์ในคลิปบอร์ด OSX ของคุณโดยไปที่เมนู Finder แก้ไข> แสดงคลิปบอร์ด (ทดสอบในโยเซมิตี)
Dannid

ขอบคุณความคิดใดที่ฉันอ่านและส่งผ่านไปยังคำสั่งถัดไป เช่นcat ~/.emulator_console_auth_token | auth <read_content>?
โดมินิก

สิ่งนี้คัดลอกเนื้อหาของไฟล์ แต่ไม่ใช่ไฟล์เอง
vy32

20

คำตอบของ Lriนั้นมุ่งไปในทิศทางที่ถูกต้อง แต่มันมีข้อบกพร่องอยู่สองข้อ: ไม่จำเป็นต้องใช้Finder ( the clipboardเป็นส่วนหนึ่งของStandardAdditions OSAX) และการให้runตัวจัดการเป็นวิธีที่เชื่อถือได้มากขึ้นในการส่งอาร์กิวเมนต์จากบรรทัดคำสั่ง (ตั้งแต่ 10.4) การเปลี่ยนแปลงทั้งสองอย่างนี้จะทำให้“ การหลบหนี” ง่ายขึ้นมากซึ่งต้องทำเพื่อเข้าสู่โปรแกรมในเชลล์

นี่คือเวอร์ชั่นของฉัน (ห่อในฟังก์ชั่นเชลล์ - คุณสามารถใส่มันลงไปใน (เช่น) ของคุณ.bashrcเพื่อให้มันพร้อมใช้งานในเชลล์ของคุณ):

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

ไฟล์ที่วางบนคลิปบอร์ดด้วยสคริปต์นี้สามารถวางในFinderเพื่อคัดลอกไฟล์ไปยังโฟลเดอร์อื่น

osascriptยังสามารถใช้เป็นล่ามแฮชปัง (ตั้งแต่ 10.5) ใส่ไว้ในไฟล์ (เช่นfile-to-clipboard)

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

ทำให้ไฟล์ปฏิบัติการ ( chmod +x /path/to/where/ever/you/put/file-to-clipboard) จากนั้นเรียกใช้เช่น:

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

หากมันถูกเก็บไว้ในไดเรกทอรีใน PATH คุณสามารถละเว้นพา ธ ไปยังไฟล์“ script”


@Lri: Finder ไม่เข้าใจชัดเจนset the clipboard to {one,two}(แม้ว่าโปรแกรม AppleScript อื่นสามารถแยกรายการได้สำเร็จ) StandardAdditionsคำสั่งคลิปบอร์ดอาจถูก จำกัด ไปยังรายการเดียว
Chris Johnsen

1
สามารถใช้กับหลายไฟล์ได้หรือไม่
VitalyB

หมายเหตุ: เส้นทางที่กำหนดจะต้องเป็นเส้นทางที่แน่นอนเพื่อให้สคริปต์ทำงานได้
Leo

8

ไม่มีวิธีที่จะบรรลุสิ่งที่คุณพยายามทำโดยใช้บรรทัดคำสั่ง ในขณะที่ Apple เสนอpbcopyและpbpasteเครื่องมือในการอนุญาตให้คัดลอกข้อความพื้นฐานคุณไม่สามารถใช้เครื่องมือเหล่านี้เพื่อคัดลอกไฟล์ในแง่ที่คุณกำลังมองหา

โดยไม่ต้องลงรายละเอียดทางเทคนิคมากเกินไปเมื่อคุณ 'คัดลอก' ไฟล์ใน Finder โดยใช้Cคุณไม่ได้ทำการคัดลอกไฟล์เองเพียงทำการอ้างอิงไปยังไฟล์บนคลิปบอร์ดและทำเครื่องหมายเป็นการอ้างอิงไฟล์ เมื่อแอปพลิเคชันได้รับการอ้างอิงนี้เมื่อคุณวางมันมีความรับผิดชอบในการจัดเรียงสิ่งต่าง ๆ ออกมาหาสิ่งที่คุณวางและท้ายที่สุดการทำงานกับไฟล์ตามที่เห็นสมควร ในสาระสำคัญเมื่อคุณคัดลอกไฟล์ใน Finder มันจะบันทึกเส้นทางไปยังไฟล์ในบางวิธีไปยังคลิปบอร์ดและเมื่อคุณวางมันจะได้รับเส้นทางของไฟล์นั้นและรู้วิธีสร้างไฟล์ใหม่โดยใช้เนื้อหาของ อันเก่า (คัดลอกไฟล์ไปยังคลิปบอร์ด, ลบมัน, ลองวางมันที่อื่น, และดูว่าเกิดอะไรขึ้น, เป็นต้น)

ในแง่ของการคัดลอกและวางเครื่องมือที่มีอยู่ในมือไม่เพียงพอที่จะทำสิ่งที่คุณต้องการ ตามคำแนะนำของ boehj คุณสามารถลองคัดลอกเนื้อหาของไฟล์เก่าไปยังไฟล์ใหม่ แต่วิธีนี้จะใช้ได้ดีสำหรับไฟล์ข้อความเท่านั้น ไฟล์ไบนารีใด ๆ ที่คุณได้รับจะเสียหาย (ลองทำสิ่งนี้ด้วยภาพ - ไฟล์นั้นเสียหาย)

บรรทัดคำสั่งแบบดั้งเดิมจะล้มเหลวคุณในทางนี้ แต่คุณสามารถใช้ดูถ้าคุณต้องการเข้าไปทำเช่นนี้ใน AppleScript osascriptแล้วกล่าวอ้างว่าผ่านบรรทัดคำสั่งด้วย


คุณพูดถูกเกี่ยวกับภาพ ฯลฯ ฉันไม่คิดอย่างนั้น ฉันเดาว่าฉันเข้าใจผิดคำถามเพราะแม้ว่าpbcopyและpbpasteจะทำงานกับไฟล์. html ได้เพียงเพราะมันเพิ่งเกิดขึ้นเป็นไฟล์ข้อความ
boehj

ไม่คุณเข้าใจคำถามอย่างถูกต้องเป็นเพียงแค่คุณคิดว่าเครื่องมือเหล่านี้ทำงานได้ตามที่ควรจะเป็นซึ่งพวกเขาทำไม่ได้ มันเป็นรถบักกี้และไม่ได้ตั้งใจว่าจะทำงานเช่นนั้นแม้ว่า Apple จะทำเอกสารได้ไม่ดีนัก หากคุณพิมพ์pbcopy -helpคุณจะได้รับที่ไม่ใช่การผลิตที่คุ้มค่าสายเพียงแค่การทำซ้ำNSLog() 'pbcopy -help'มันช่วยให้เป็นโปรแกรมเมอร์ที่จะเข้าใจสิ่งนี้ซึ่งเป็นเหตุผลว่าทำไมฉันถึงรู้สึกว่าจำเป็นต้องพูดสอด
Itai Ferber

1
ใช่ไม่มีปัญหา ;)
Itai Ferber

1
ใครก็ตามที่ต้องการ pbcopy เพื่อรับความสนใจบางอย่างอาจได้รับบัญชีนักพัฒนาซอฟต์แวร์ฟรีและยื่นข้อบกพร่องบางอย่าง - bugreport.apple.com - ไม่รับประกันว่ามันจะช่วยได้ แต่จะให้วิศวกรใช้เวลาในการทำงานกับสิ่งเหล่านี้ถ้าคนยังสนใจ .
bmike

1
OP สามารถบรรลุสิ่งที่ต้องการด้วย AppleScript บน CLI ได้หรือไม่

7

ฟังก์ชั่นด้านล่างใช้งานได้กับไฟล์เดียวเท่านั้นและไม่รองรับหลายไฟล์ มันต้อง GNU ซึ่งคุณสามารถติดตั้งโดยการเรียกใช้readlinkbrew install findutils

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

แก้ไข: ฉันลบtell app "Finder"บล็อก

แก้ไข 2: เปลี่ยนกลับเป็นเวอร์ชันที่รองรับเส้นทางที่สัมพันธ์กัน


2
อันนี้ใช้งานได้จริง!
Bemmu

6

การดำเนินการคำสั่งในเทอร์มิสำเนาเนื้อหาของแฟ้มที่มีชื่อpbcopy < filenamefilename


3

หากต้องการคัดลอกไฟล์ไปยังปลายทางให้ใช้cpคำสั่ง

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

ดูman cpข้อมูลเพิ่มเติม


2
นี่ไม่ใช่คำตอบสำหรับคำถามที่ถามซึ่งอ้างอิงคลิปบอร์ดเป็นที่ตั้งเป้าหมาย
kellyfj

2

นี่เป็นสคริปต์ Shell / Bash ง่าย ๆ เพียงวางไว้ใน.bashrcไฟล์ของคุณ(หรือสิ่งที่ชอบ):

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

0

ด้วยการสนับสนุนของไฟล์ญาติ:

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

เรียกใช้clip_img path-to-fileเพื่อคัดลอกรูปภาพไปยังคลิปบอร์ดและpath-to-fileอาจสัมพันธ์กัน ไฟล์อาจเป็นไฟล์ jpeg หรือ png


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.