Existe uma linha de comando equivalente a metáfora recortar e colar para arquivos?

3

Contexto: estou navegando nas pastas e localizando os arquivos de que preciso. Eu gostaria de copiar meus arquivos em algum lugar para colocá-los em outro lugar. Mas eu não quero ter que lidar com a tentativa de descobrir caminhos relativos para a origem e o destino.

Basicamente eu quero algo parecido com o que eu posso fazer em exploradores de arquivos (selecionar arquivos, copiar, colar em outro lugar). Então, um fluxo de trabalho como ...

cd some/crazy/directory/with/too/long/a/name
copy file 
cd ~/some/other/place
paste 
    
por rtpg 20.02.2013 / 09:12

3 respostas

1

Não há um comando interno que faça isso no bash. No entanto, existe um script (uma função e um alias) que você pode colocar no seu .bashrc que lhe dá a funcionalidade.

Eles estão detalhados aqui: link

E são:

ccopy(){ for i in $*; do cp -a $i /tmp/ccopy.$i; done }
alias cpaste="ls -d /tmp/ccopy* | sed 's|[^\.]*.\.||' | xargs -I % mv /tmp/ccopy.% ./%"

Como diz a descrição no site, basta adicionar essas duas linhas ao seu .bashrc e, em seguida, você pode usar o ccopy para adicionar arquivos à lista de arquivos a serem copiados e, em seguida, copiá-los para o destino. Você também pode 'gerenciar' a lista de arquivos olhando para / tmp / ccopy *.

NOTA - este script está limitado a arquivos regulares com nomes 'normais'. Ele explicitamente não lida com 'espaços' no nome do arquivo e também não copiará / colará pastas. O artigo vinculado tem um link para uma versão que funciona com pastas, mas não sei se essa versão pode manipular espaços ou caracteres não regulares nos nomes de arquivos / pastas. Eu faço a maioria do meu trabalho (linux) a partir da linha de comando para que esta versão tenha atendido ao meu caso de uso.

    
por 20.02.2013 / 09:38
1

Você pode atribuir o nome do arquivo a uma variável. readlink -f fornecerá o arquivo / absolute / path / to /. /

cd some/crazy/directory/with/too/long/a/name
copy="$(readlink -f file)"
cd ~/some/other/place
cp "$copy" newfile

Isso só funcionará para um único arquivo de cada vez, é claro.

    
por 20.02.2013 / 10:50
1

Mesmo se você não quiser usar o script sugerido pelo @PJC, você pode usar sua ideia principal: primeiro copiar arquivo (s) para /tmp , então pegue a partir daí:

cd some/crazy/directory/with/too/long/a/name
cp file /tmp
cd ~/some/other/place
cp /tmp/file .

Ele não resolve o problema completamente: você precisa digitar novamente o nome do arquivo, mas pelo menos sem o caminho. Estou usando quando estou com preguiça.

    
por 20.04.2013 / 16:51

Tags