Sao chép và dán một tập tin / thư mục từ dòng lệnh


17

Thay vì sử dụng lệnh sau:

cp {tệp nguồn} {tệp tin}

Tôi muốn có thể sao chép một tập tin vào bảng tạm và dán nó vào một nơi khác, trong một thư mục khác. đại loại như thế này:

/ usr / local / dir1 # cp {tệp nguồn}
/ usr / local / dir1 # cd / usr / local / dir2
/ usr / local / dir2 # paste

Có thể không?

Câu trả lời:


17

Tôi nghĩ bạn nên làm một cái gì đó giống như các ứng dụng GUI làm. Ý tưởng của tôi để làm điều này là viết hai hàm cho Sao chép và Dán, trong đó Sao chép ghi đường dẫn của tệp sẽ được sao chép vào tệp tạm thời và Dán đọc các đường dẫn đó và chỉ cần gọi cplệnh. Việc triển khai của tôi (sẽ được đưa vào .bashrctập tin) như sau:

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
}

Các kịch bản tốt hơn có thể được viết để thực hiện ý tưởng này, tôi đã tự mình thử nghiệm và nó hoạt động rất tốt cho các tệp và thư mục (Tôi không biết làm thế nào xclipcó thể hoạt động để sao chép các thư mục !!)


Ví dụ:

/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
Công việc này như một cái duyên vậy!
Meysam

2
Tôi thích ý tưởng này. Và với một chút sửa đổi, bạn thậm chí có thể thực hiện chức năng "cắt".
Pablo Venturino

@Gilles Bạn có thể vui lòng giải thích lý do tại sao bạn thay thế echobằng printf?
Meysam

@Meysam Để làm việc ngay cả dưới shopt -s xpg_echo.
Gilles 'SO- ngừng trở nên xấu xa'

1
@Meysam printflà xách tay và an toàn trong khi echokhông. Wiki Wooledge đề cập ngắn gọn về điều này.
jw013

10

tôi đề nghị xclip. tôi sử dụng nó tất cả thời gian cho việc này. nhưng bạn không cần một kịch bản. Chỉ cần sử dụng chức năng.

Tôi thấy không cần phải sử dụng các tập lệnh này, đặc biệt, bởi vì nếu bạn đang làm những gì tôi nghĩ bạn đang làm, bạn sẽ thấy các tập lệnh đã được đề cập (trên blog linux tidbits hữu ích) gây phiền nhiễu vì chúng nhắc bạn nhập liệu bất cứ khi nào có thể , chỉ cần để sử dụng chúng, trái với triết lý unix.

tôi đề nghị chỉ cần viết một số chức năng vào .bashrc:

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

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

để sử dụng những thứ này, bạn cần apt-get install xclip(Debian, Ubuntu, Linux Mint, v.v.) hoặc zypper in xclip(openSUSE, các hệ thống dựa trên .rpm khác) hoặc một số tương đương. chương trình nên có sẵn trên bất kỳ hệ thống nào bạn đang sử dụng.


3

Bạn có thể sử dụng xcliplệnh cho việc này. Bạn có thể tải xuống các tập lệnh bash từ liên kết này và đặt bí danh cho bash cp2clipbash clippastevào .bashrctệp của bạn .


@ ý bạn là gì bởi bí danh?
ixtmixilix

tôi có nghĩa là giữ các tệp trong thư mục nhà của bạn và đặt hai bí danh trong bí danh bạn có thể sử dụng những nơi này Để đọc thêm về bí danh, bạn có thể xem man aliashoặc linfo.org/alias.html
harish.venkat
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.