Скопируйте и вставьте файл / каталог из командной строки


17

Вместо использования следующей команды:

cp {исходный файл} {dest file}

Я хочу иметь возможность скопировать файл в буфер обмена и вставить его в другое место, в другой каталог. что-то вроде этого:

/ 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
Мне нравится эта идея. И с небольшими изменениями, вы могли бы даже реализовать функцию «вырезать» тоже.
Пабло Вентурино

@Gilles Не могли бы вы объяснить , почему вы заменили echoс printf?
Meysam

@Meysam Для работы даже под shopt -s xpg_echo.
Жиль "ТАК - перестань быть злым"

1
@Meysam printfпортативен и безопасен, пока echoнет. Вики Wooledge упоминает это кратко.
jw013

10

Я предлагаю Xclip. Я использую это все время для этого. но вам не нужен сценарий. просто используйте функции.

Я не вижу необходимости использовать эти сценарии, в частности, потому что, если вы делаете то, что я думаю, вы делаете, вы найдете скрипты, которые уже упоминались (в полезном блоге Linux Tidbits), раздражает, потому что они запрашивают ввод везде , где это возможно , просто использовать их, вопреки философии Unix.

Я предлагаю просто написать некоторые функции в ваш .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

я имел в виду сохранить файлы в вашем домашнем каталоге и поместить два псевдонима в ваш псевдоним .bashrc cp2clip = 'bash /home/<username>/cp2clip.sh' и clippaste = 'bash /home/<username>/clippaste.sh' так Вы можете использовать их где угодно. Чтобы узнать больше об псевдонимах, вы можете увидеть man aliasили linfo.org/alias.html
harish.venkat
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.