Скопіюйте та вставте файл / каталог із командного рядка


17

Замість використання наступної команди:

cp {вихідний файл} {dest file}

Я хочу мати можливість скопіювати файл у буфер обміну та вставити його десь в інший каталог. щось на зразок цього:

/ usr / local / dir1 # cp {вихідний файл}
/ usr / local / dir1 # cd / usr / local / dir2
/ usr / local / dir2 # paste

Це можливо?

Відповіді:


17

Я думаю, ви повинні зробити щось на зразок програм GUI. Моя ідея зробити це - написати дві функції для Copy and Paste, де Copy записує шлях файлів, які потрібно скопіювати у тимчасовий файл, а Paste читає ці шляхи та просто викликає 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
Це працює як шарм!
Мейсам

2
Мені подобається ця ідея. І з невеликими модифікаціями ви навіть можете реалізувати функцію "вирізання".
Пабло Вентурино,

@Gilles Чи не могли б ви пояснити , чому ви замінили echoз printf?
Мейсам

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

1
@Meysam printfпортативний і безпечний, поки echoйого немає. Вікі Wooledge коротко згадує про це.
jw013

10

Я пропоную xclip. я використовую це весь час для цього. але сценарій вам не потрібен. просто використовуйте функції.

Я не бачу необхідності використовувати ці сценарії, зокрема, тому що, якщо ви робите те, що, на мою думку, ви робите, ви знайдете вже згадані сценарії (на корисному блозі Lidid 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 за цим посиланням та помістити псевдоніми для 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.