Komut satırından bir dosyayı / dizini kopyalayıp yapıştırın


17

Aşağıdaki komutu kullanmak yerine:

cp {kaynak dosya} {dest dosya}

Bir dosyayı panoya kopyalayıp başka bir yere, başka bir dizine yapıştırmak istiyorum. böyle bir şey:

/ usr / local / dir1 # cp {kaynak dosya}
/ usr / local / dir1 # cd / usr / local / dir2
/ usr / local / dir2 # yapıştır

Mümkün mü?

Yanıtlar:


17

Bence GUI uygulamalarında olduğu gibi bir şeyler yapmalısınız. Bunu yapmak benim fikrim, Kopyala ve Yapıştır için iki işlev yazmaktır; burada Copy, kopyalanacak dosyaların yolunu geçici bir dosyaya yazar ve Yapıştır bu yolları okur ve sadece cpkomutu çağırır . Uygulamam ( .bashrcdosyaya konacak ) aşağıdaki gibidir:

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
}

Bu fikri uygulamak için daha iyi komut dosyaları yazılabilir, kendim test ettim ve dosyalar ve klasörler için çok iyi çalışıyor ( xclipklasörleri kopyalamak için nasıl çalışabileceğini bilmiyorum !!)


Örneğin:

/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
Bu bir cazibe gibi çalışıyor!
Meysam

2
Bu fikri seviyorum. Ve küçük değişikliklerle, bir "kesme" işlevi de uygulayabilirsiniz.
Pablo Venturino

Eğer yerini neden @Gilles açıklayabilir misiniz echoile printf?
Meysam

@Meysam Altında bile çalışmak için shopt -s xpg_echo.
Gilles 'SO- kötü olmayı bırak'

1
@Meysam printftaşınabilir değil ve güvenlidir echo. Wooledge wiki bundan kısaca bahseder .
jw013

10

xclip öneririm. Bunun için her zaman kullanıyorum. ama bir senaryoya ihtiyacınız yok. sadece fonksiyonları kullanın.

özellikle bu komut dosyalarını kullanmaya gerek yok, çünkü yaptığınızı düşündüğüm şeyi yapıyorsanız, daha önce bahsettiğiniz komut dosyalarını (yararlı linux tidbits blogunda) can sıkıcı bulacaksınız çünkü mümkün olan her yerde giriş yapmanızı istiyorlar , sadece Unix felsefesinin aksine onları kullanmak.

Ben sadece bazı işlevleri yazma öneririz .bashrc:

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

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

bunları kullanmak için apt-get install xclip(Debian, Ubuntu, Linux Mint, vb.) veya zypper in xclip(openSUSE, diğer .rpm tabanlı sistemler) veya eşdeğeri bir şey gerekir. kullandığınız sistemde program mevcut olmalıdır.


3

Bunun için xclipkomutu kullanabilirsiniz . Bu bağlantıdan bash komut dosyalarını indirebilir bash cp2clipve dosyanız için ve bash clippasteiçine takma adlar koyabilirsiniz .bashrc.


@ takma adlarla ne demek istiyorsun?
ixtmixilix

dosyaları ana dizininizde tutmak ve .bashrc takma adınıza iki takma ad koymak demekti cp2clip = 'bash / home / <kullanıcıadı> /cp2clip.sh' ve clippaste = 'bash / home / <username> /clippaste.sh' bunları her yerde kullanabilirsiniz. Gördüğünüz takma adları hakkında daha fazla bilgi edinmek man aliasya da linfo.org/alias.html
harish.venkat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.