คัดลอกและวางไฟล์ / ไดเรกทอรีจากบรรทัดคำสั่ง


17

แทนที่จะใช้คำสั่งต่อไปนี้:

cp {ไฟล์ต้นฉบับ} {ไฟล์ปลายทาง}

ฉันต้องการคัดลอกไฟล์ไปยังคลิปบอร์ดและวางไว้ที่อื่นในไดเรกทอรีอื่น บางสิ่งเช่นนี้

/ usr / local / dir1 # cp {ไฟล์ต้นฉบับ}
/ usr / local / dir1 # cd / usr / local / dir2
/ usr / local / dir2 # paste

เป็นไปได้ไหม?

คำตอบ:


17

ฉันคิดว่าคุณควรทำบางอย่างเช่นแอปพลิเคชัน GUI ทำ ความคิดของฉันในการทำเช่นนี้คือการเขียนสองฟังก์ชั่นสำหรับการคัดลอกและวางโดยที่การคัดลอกเขียนเส้นทางของไฟล์ที่จะคัดลอกไปยังไฟล์ชั่วคราวและวางอ่านเส้นทางเหล่านั้นและเพียงแค่เรียกcpคำสั่ง การติดตั้งของฉัน (ที่จะใส่ใน.bashrcไฟล์) เป็นเหมือนด้านล่าง:

function Copy {
    touch ~/.clipfiles
    for i in "$@"; do
      if [[ $i != /* ]]; then i=$PWD/$i; fi
      i=${i//\\/\\\\}; i=${i//$'\n'/$'\\\n'}
      printf '%s\n' "$i"
    done >> ~/.clipfiles
}

function Paste {
    while IFS= read src; do
      cp -Rdp "$src" .
    done < ~/.clipfiles
    rm ~/.clipfiles
}

สคริปต์ที่ดีกว่านั้นสามารถเขียนเพื่อนำความคิดนี้ไปใช้ฉันทดสอบตัวเองและใช้งานได้ดีกับไฟล์และโฟลเดอร์ (ฉันไม่รู้ว่าxclipจะทำงานอย่างไรเพื่อคัดลอกโฟลเดอร์ !!)


ตัวอย่างเช่น:

/usr/local/dir1# Copy a.txt *.cpp
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Paste

/usr/local/dir1# Copy *.h *.cpp b.txt subdir1
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Paste

/usr/local/dir1# Copy a.txt b.txt 
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Copy c.txt d.txt
/usr/local/dir2# cd /usr/local/dir3
/usr/local/dir3# Paste

1
มันใช้งานได้เหมือนมีเสน่ห์!
Meysam

2
ฉันชอบความคิดนี้ และด้วยการดัดแปลงเล็กน้อยคุณสามารถใช้ฟังก์ชั่น "ตัด" ได้เช่นกัน
Pablo Venturino

@Gilles คุณช่วยอธิบายหน่อยได้ไหมว่าทำไมคุณถึงถูกแทนที่echoด้วยprintf?
Meysam

@Meysam shopt -s xpg_echoการทำงานแม้ภายใต้
Gilles 'หยุดความชั่วร้าย'

1
@Meysam printfสามารถพกพาได้และปลอดภัยในขณะที่echoไม่อยู่ The Wooledge wiki กล่าวถึงสั้น ๆ นี้
jw013

10

ฉันแนะนำ xclip ฉันใช้มันตลอดเวลาสำหรับสิ่งนี้ แต่คุณไม่ต้องการสคริปต์ เพียงแค่ใช้ฟังก์ชั่น

ฉันเห็นไม่จำเป็นต้องใช้สคริปต์เหล่านี้โดยเฉพาะอย่างยิ่งเพราะถ้าคุณกำลังทำในสิ่งที่ผมคิดว่าคุณกำลังทำคุณจะได้พบกับสคริปต์ที่กล่าวมาแล้ว (บนที่เป็นประโยชน์ลินุกซ์ tidbits บล็อก) ที่น่ารำคาญเพราะพวกเขาแจ้งให้คุณสำหรับการป้อนข้อมูลเป็นไปได้เพียงแค่ ที่จะใช้พวกเขาตรงกันข้ามกับปรัชญายูนิกซ์

ฉันขอแนะนำให้เขียนฟังก์ชั่นบางอย่างลงใน.bashrc:

clip2file () {
  xclip -out -selection clipboard >> $@
  echo -e "\n" >> $@
}

file2clip () {
  cat $@ | xclip -selection clipboard
}

ในการใช้สิ่งเหล่านี้คุณต้องapt-get install xclip(Debian, Ubuntu, Linux Mint, ฯลฯ ) หรือzypper in xclip(openSUSE, ระบบที่ใช้. rpm อื่น ๆ ) หรือระบบที่เทียบเท่า โปรแกรมควรพร้อมใช้งานในทุกระบบที่คุณใช้งาน


3

คุณสามารถใช้xclipคำสั่งนี้ คุณสามารถดาวน์โหลดสคริปต์ทุบตีจากลิงค์นี้และใส่นามแฝงสำหรับbash cp2clipและbash clippasteลงใน.bashrcไฟล์


@ คุณหมายถึงอะไรโดยนามแฝง?
ixtmixilix

ฉันหมายถึงเก็บไฟล์ไว้ในโฮมไดเร็กตอรี่ของคุณและใส่ alias สองอันลงใน. bashrc alias cp2clip = 'bash / home / <username> /cp2clip.sh' และ clippaste = 'bash / home / <username> /clippaste.sh' คุณสามารถใช้สิ่งเหล่านี้ได้ทุกที่ หากต้องการอ่านเพิ่มเติมเกี่ยวกับนามแฝงคุณสามารถดูman aliasหรือlinfo.org/alias.html
harish.venkat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.