คัดลอกเนื้อหาของไฟล์ไปยังคลิปบอร์ดโดยไม่แสดงเนื้อหา


67

วิธีคัดลอกเนื้อหาของไฟล์ใน UNIX โดยไม่แสดงเนื้อหาไฟล์ ฉันไม่ต้องการ cat หรือ vi เพื่อดูเนื้อหา

ฉันต้องการคัดลอกไปยังคลิปบอร์ดเพื่อให้ฉันสามารถวางลงบนแผ่นจดบันทึก windows ของฉัน

ฉันไม่สามารถคัดลอกไฟล์จากเซิร์ฟเวอร์นั้นไปยังอีกอันเนื่องมาจากข้อ จำกัด การเข้าถึง


คุณไม่สามารถเข้าถึงเนื้อหาของไฟล์โดยไม่เปิด ...
123

ตกลงถ้าเป็นเช่นนั้นจะมีวิธีที่ง่ายในการคัดลอกไฟล์ขนาดใหญ่มาก ฉันมี 1,000 เส้น
Web Nash

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

ใหญ่มาก 1,000 บรรทัด เลือกหนึ่ง.
123

2
อะไรหน้าต่าง Notepad BTW?
Stéphane Chazelas

คำตอบ:


77

X11

หากใช้ X11 (GUI ที่ใช้กันมากที่สุดในระบบปฏิบัติการ Unix หรือ Linux แบบดั้งเดิม) เพื่อคัดลอกเนื้อหาของไฟล์ไปยังตัวเลือก X11 CLIPBOARD โดยไม่แสดงผลคุณสามารถใช้ยูทิลิตี้xclipหรือxsel

xclip -sel c < file

หรือ:

xsel -b < file

เพื่อจัดเก็บเนื้อหาของfileเป็นตัวเลือก CLIPBOARD X11

โปรดทราบว่าควรจัดเก็บโดยใช้การเข้ารหัส UTF-8 ไม่เช่นนั้นการวางจะไม่ทำงานอย่างถูกต้อง หากfileมีการเข้ารหัสโดยใช้ชุดอักขระอื่นคุณควรแปลงเป็น UTF-8 ก่อนเช่น:

iconv -f latin1 -t utf8 | xclip -sel c

สำหรับไฟล์ที่เข้ารหัสในlatin1 / iso8859-1

ในการจัดเก็บเป็น CUT_BUFFER (แอปพลิเคชันบางรายการยังคงถูกถามเช่นxtermเมื่อไม่มีสิ่งใดอ้างถึงการเลือก CLIPBOARD หรือ Primary X และไม่จำเป็นต้องมีกระบวนการทำงานเพื่อให้บริการเหมือนกับการเลือก) แม้ว่าคุณจะไม่ต้องการหรือ จำเป็นต้องใช้ที่ในปัจจุบัน:

xprop -root -format CUT_BUFFER0 8s -set CUT_BUFFER0 "$(cat file)"

(ลบอักขระบรรทัดใหม่ต่อท้ายออกจากfile)

หน้าจอ GNU

GNU screenมีreadbufคำสั่งให้เลื่อนเนื้อหาของไฟล์ไปยังบัฟเฟอร์ copy-paste (ซึ่งคุณวางด้วย^A]) ดังนั้น:

screen -X readbuf file

Apple OS / X

แม้ว่า Apple OS / X สามารถใช้ X11 ได้ ไม่ได้เป็นค่าเริ่มต้นเว้นแต่คุณจะเรียกใช้แอปพลิเคชัน X11 คุณจะสามารถใช้xclipหรือxselมี OS / X ควรซิงโครไนซ์ตัวเลือก X11 CLIPBOARD กับบัฟเฟอร์ของบอร์ด OS / X แต่นั่นเป็นการเสียเปล่าที่จะเริ่มต้นเซิร์ฟเวอร์ X11 สำหรับสิ่งนั้น

บน OS / X คุณสามารถใช้pbcopyคำสั่งเพื่อเก็บเนื้อหาตามอำเภอใจไว้ในบัฟเฟอร์บอร์ด :

pbcopy < file

(การเข้ารหัสอักขระของไฟล์ถูกคาดหวังให้เป็นโลแคล)

เปลือกหอย

เชลล์ส่วนใหญ่มีบัฟเฟอร์การคัดลอกวางของตัวเอง ในโหมด emacs การดำเนินการตัดและคัดลอกจัดเก็บข้อความที่คัดลอก / ตัดลงบนสแต็กที่คุณดึง / วางด้วยCtrl-Yและวนรอบด้วยAlt+Y

zsh CUTBUFFER / killring

ในzshสแต็กจะถูกเก็บไว้ใน$killringอาร์เรย์และด้านบนของสแต็กใน$CUTBUFFERตัวแปรแม้ว่าตัวแปรเหล่านั้นจะใช้ได้เฉพาะจากวิดเจ็ต Zsh Line Editor (zle) และวิดเจ็ตพิเศษสองสามตัวเป็นวิธีที่ต้องการจัดการกับสิ่งเหล่านั้น

เนื่องจากสิ่งเหล่านี้พร้อมใช้งานผ่าน ZLE เท่านั้นการทำด้วยคำสั่งจึงค่อนข้างซับซ้อน:

zmodload zsh/mapfile
zle-line-init() {
  if [ -n "$FILE_TO_COPY" ]; then
    zle copy-region-as-kill $mapfile[$FILE_TO_COPY]
    unset FILE_TO_COPY
  fi
}
zle -N zle-line-init
file-copy() FILE_TO_COPY=$1:A       

zle-line-initเครื่องมือพิเศษจะถูกดำเนินการครั้งเดียวในช่วงเริ่มต้นของแต่ละพร้อมรับคำสั่งใหม่ หมายความว่าไฟล์จะถูกคัดลอกในพรอมต์ถัดไปเท่านั้น ตัวอย่างเช่นหากคุณ:

file-copy file; sleep 2

ไฟล์จะถูกคัดลอกหลังจาก 2 วินาที


3
ฉันเผชิญข้อผิดพลาดนี้:Error: Can't open display: (null)
Marcelo Filho

ปัญหาเดียวกันใน fedora 7
Michael Pacheco

@MarceloFilho xclipและxselเป็นยูทิลิตี้ X11 พวกเขาจัดการกับการเลือก X11 ดังนั้นจึงสามารถใช้ได้เฉพาะในสภาพแวดล้อม X11 ที่$DISPLAYมีการตั้งค่า
Stéphane Chazelas

2

บางทีคุณอาจจะอยากจะถามนี้ แต่ไฟล์ใด ๆ ที่คุณต้องการอ่านจะต้องเปิดโดยการเรียกระบบบางอย่าง หากคุณไม่มีสิทธิ์เข้าถึงไฟล์คุณจะไม่สามารถอ่านไฟล์ได้ นั่นเป็นแนวคิดของการ จำกัด การเข้าถึง


แล้วปัญหาที่แท้จริงของคุณคืออะไร หากคุณสามารถอ่านได้ แต่ไม่สามารถคัดลอกได้คุณอาจไม่สามารถเขียนได้ แต่เมื่อคุณต้องการคัดลอกคุณต้องเขียนข้อมูลที่ไหนสักแห่ง
ikrabbe

ขอขอบคุณ!!! คุณช่วยชีวิตฉันไว้)
Alena Kastsiukavets

0

ใช้ X11:

xclip -o > file

หากคุณสามารถอ่านไฟล์ปัญหาการเข้าถึงเป็นเรื่องเกี่ยวกับเซิร์ฟเวอร์ปลายทาง

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