No Bash, suponha que eu visite um diretório e depois outro diretório. Gostaria de copiar um arquivo do primeiro diretório para o segundo diretório, mas sem especificar os nomes de caminho longos deles. É possível?
Minha solução temporária é usar /tmp
como local temporário para armazenar uma cópia do arquivo. cp myfile /tmp
quando estou no primeiro diretório e depois cp /tmp/myfile .
quando estou no segundo diretório. Mas posso verificar se o arquivo substituirá algo /tmp
.
Existe algo semelhante a uma área de transferência para copiar e colar um arquivo?
cd
comando, paracd -
voltar ao diretório anterior, seta para cima para recuperar ocd
comando e editar a linha a ser emcp
vez decd
. (ctrl-a (início da linha), alt-d (palavracp -a
final ) , ctrl-e (fim de linha)).M-x term
você pode usar a área de transferência do Emacs.Respostas:
Usando o Bash, eu apenas visitava os diretórios:
Então, eu usaria o atalho
~-
, que aponta para o diretório anterior:Se alguém quiser visitar diretórios na ordem inversa, então:
fonte
"$OLDPWD"
. Por que trêscp
comandos separados , no entanto?cp -a ~-/file[1-3].txt .
cp
são exemplos. No mundo real, caracteres curinga também podem ser usados para simplificar a tarefa de cópia.pushd
e analisardirs
... mas isso é muito, muito melhor. Eu sugiro que você adicionar o fato de que"$OLDPWD"
é exatamente equivalente a~-
e é mais portátil (útil para aqueles que não usambash
.)~+
é igualmente um atalho para"$PWD"
Se eu visse essa situação como pontual, eu poderia:
Se houvesse diretórios nos quais eu copiava arquivos semi-regularmente, provavelmente definiria algumas variáveis mnemônicas para eles no meu perfil.
Editado para adicionar:
Depois de dormir nele, me perguntei o quão perto eu poderia chegar a outros comportamentos da GUI / OS em que você seleciona algum número de arquivos, "recorta" ou "copia" e depois os "cola" em outro lugar. O melhor mecanismo de seleção que eu pude criar foi o seu cérebro / preferências, além do recurso brilhante da concha. Não sou muito criativo com nomes, mas esta é a ideia básica (na sintaxe do Bash):
Para usá-lo, coloque o código em ~ / .bash_profile, depois
cd
no diretório de origem e executecopyfiles glob*here
oucutfiles glob*here
. Tudo o que acontece é que seu shell expande os globs e coloca esses nomes de arquivos em uma matriz. Você então executacd
o diretório de destino epastefiles
executa umcp
comando para cada arquivo de origem. Se você já "cortou" os arquivos, os arquivos de pasta também removerão o arquivo de origem (ou tentam). Isso não realiza nenhuma verificação de erro (dos arquivos existentes, antes de potencialmente esbarrá-los com o;;cp
ou você tem permissões para remover os arquivos durante um "corte" ou pode acessar novamente o diretório de origem depois de sair) ).fonte
$OLDPWD
já existe, que pode ser reduzido para~-
bash e zsh.Eu acho que
~-
é a resposta certa, mas observe que o bash possui um editor de linha interno que pode copiar / colar texto.Se você estiver no modo emacs, poderá recuperar seu
cd
comando do histórico e usar Control-upara matar a linha na "área de transferência" do bash chamada de kill-ring (existem outras maneiras também). Em seguida, você pode puxar essa sequência para um novo comando a qualquer momento com Control-y. Obviamente, no seu exemplo, isso depende de você ter usado um nome de diretório absoluto em seucd
comando.Você também pode usar a interessante ligação de chave padrão de Meta-.. Isso copia a última palavra do comando anterior para sua linha atual. Se repetido, cada vez que retorna um comando no histórico. Então, se você fizer um
cd /x
,cd /y
seguido decd
Meta-.Meta-.você terá/x
em sua entrada.fonte
Expandindo a resposta de Anderson M. Gomes , o Bash permite que você se refira a qualquer diretório anterior na pilha de diretórios, digitando
~N
(ou~+N
) ondeN
está a posição na pilha de diretórios. Por exemplo:Agora você pode copiar um arquivo entre dois diretórios anteriores, nenhum deles o atual, com:
Para resolver o problema do pôster original, você faria:
Com um grande conjunto de arquivos, você pode listar seus nomes em um arquivo de manifesto e, em seguida, fazer a cópia do diretório de origem:
Consulte também: esta seção da página de manual do Bash
Da mesma forma, no Tcsh, você pode usar a
=2
notação (em vez de~2
) para se referir ao segundo diretório na sua pilha de diretórios.Consulte também: esta seção da página do manual Tcsh
fonte
quando você estiver no primeiro diretório, digamos a fonte ou
src
, resumindo, executedepois
cd
no segundo diretório e execute:a
-i
opção perguntará se você deseja substituir, se há um arquivo duplicadofonte
Uma variação na resposta de anderson-m-gomes. Usando o Bash, eu apenas visitava os diretórios:
Então, eu usaria a variável $ OLDPWD, que aponta para o diretório anterior:
Se alguém quiser visitar diretórios na ordem inversa, então:
fonte
$OLDPWD
contiver espaços, isso será interrompido. Além disso, eu sempre usocp -a
. Além disso, é lamentável que o preenchimento de guias seja interrompido em expansões variáveis. Você pode usar ctrl-alt-e para expandir a linha de comando atual, após digitar a parte $ OLDPWD.~-
é um atalho para$OLDPWD
Se no bash, eu usaria pushd e popd . Esses comandos mantêm uma pilha FIFO útil de diretórios para uso posterior. Você pode consultar a pilha a qualquer momento usando dirs .
Como tal, eu faria:
fonte
Você pode usar
xclip
:Exemplo:
Visite também xsel .
fonte
tar | gzip
entra / sai da área de transferência do X. Meio desajeitado em comparação comcp
, e não generaliza, para criar links simbólicos ou hardlinks. (cp -as
oucp -al
)Você pode conferir o
clipboard-files
script aqui: https://github.com/larspontoppidan/clipboard-filesEle fornece comandos como
ccopy
,ccut
ecpaste
que usar a prancheta ambiente de trabalho e permitir cópia intuitiva / colar de arquivos:À medida que a área de transferência do ambiente de área de trabalho é usada, a cópia / colagem irá interagir com os arquivos colocados na área de transferência em outros programas, como gerenciadores de arquivos e IDE. Pelo menos, funciona em desktops semelhantes ao Gnome.
Divulgação completa, eu escrevi o roteiro depois de desistir de encontrar algo parecido por aí ...
fonte