Copie e cole um arquivo / diretório da linha de comando

17

Em vez de usar o seguinte comando:

cp {source file} {dest file}

Eu quero poder copiar um arquivo para a área de transferência e colá-lo em outro lugar, em outro diretório. algo assim:

/usr/local/dir1# cp {source file}
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# paste

É possível?

    
por Meysam 04.02.2012 / 10:51

3 respostas

17

Acho que você deveria fazer algo como as aplicações GUI. Minha idéia para fazer isso é escrever duas funções para Copiar e Colar, onde Copiar escreve o caminho dos arquivos a serem copiados para um arquivo temporário e Colar lê esses caminhos e simplesmente chama o comando cp . Minha implementação (para ser colocado no arquivo .bashrc ) é como abaixo:

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
}

Podem ser escritos scripts melhores para implementar essa idéia, eu testei o meu próprio e funciona muito bem para arquivos e pastas (não sei como xclip poderia funcionar para copiar pastas !!)

Por exemplo:

/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
    
por 04.02.2012 / 14:45
10

eu sugiro xclip. Eu uso isso o tempo todo para isso. mas você não precisa de um script. apenas use funções.

Eu não vejo necessidade de usar estes scripts, em particular, porque se você está fazendo o que eu acho que você está fazendo, você vai encontrar os scripts já mencionados (no útil blog linux tidbits) irritantes porque eles solicitam a entrada < sempre que possível , apenas para usá-los, ao contrário da filosofia unix.

Sugiro apenas escrever algumas funções no seu .bashrc :

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

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

para usar estes, você precisa apt-get install xclip (Debian, Ubuntu, Linux Mint, etc.) ou zypper in xclip (openSUSE, outros sistemas baseados em .rpm) ou algum equivalente. o programa deve estar disponível em qualquer sistema que você esteja usando.

    
por 04.02.2012 / 12:20
3

Você pode usar o comando xclip para isso. Você pode baixar scripts bash de este link e colocar aliases para bash cp2clip e bash clippaste no seu arquivo .bashrc .

    
por 04.02.2012 / 11:03