ocultando caminhos longos em variáveis no Bash

2

Eu tenho que mover arquivos de uma pasta para outra, mas eles residem em caminhos totalmente diferentes. O caminho de destino é tão longo e complicado que não consigo me lembrar dele. Existe alguma maneira de ir primeiro para o diretório de destino, em seguida, armazenar o caminho em alguma variável permite supor X e, em seguida, ir para o diretório de origem e escrever um comando como esse:

 mv * $X
    
por Al Bundy 11.11.2014 / 19:52

6 respostas

7

Tente:

cd /your/long/path
X=$(pwd) 

O comando pwd imprime o diretório atual; com o comando X=$(pwd) você está armazenando a saída do comando na variável (1) X (sem espaços ao redor do = !)

cd /the/other/dir/
mv * "$X"

Agora você está usando o valor da variável X , usando $X (leia $ como "o valor de"). Os " que estão em torno do $X são necessários se o nome do diretório contiver espaços ou outros caracteres especiais.

Se você não tem certeza sobre o que está no X, pode verificar o conteúdo dele com

echo "$X" 

(1) nas conchas bash (e outras) elas são chamadas de parâmetros . Veja por exemplo aqui para um tutorial simples , ou aqui .

    
por Rmano 11.11.2014 / 19:58
4

Assumindo que seu shell é bash, você pode usar

pushd /your/long/directory
popd
mv ./* "$OLDPWD"

$ OLDPWD é definido pelo bash quando você altera os diretórios.

    
por glenn jackman 11.11.2014 / 20:12
2

Suponha que você esteja no diretório com arquivos que deseja mover, use

cd target_dir
cd -

para armazenar seu target_dir na variável $OLDPWD e voltar para o diretório original.

Agora, você pode usar

mv * "$OLDPWD"

para mover seus arquivos para o diretório de destino.

Notas:

$PWD ( P rint W orking irectory) sempre lembra o diretório de trabalho atual.

E $OLDPWD sempre lembra o último diretório de trabalho.

A propósito, use a tecla TAB para completar automaticamente seu caminho ao digitar seu caminho.

    
por pallxk 12.11.2014 / 08:51
1

Algum tempo atrás, tentei criar uma versão mais elaborada de X=$(pwd) e mv * $X . O resultado foi algo que eu chamo de "bashPortalGun". Aqui está:

link

Esses scripts transformam seu prompt de shell em algo parecido com isto:

me@host [orange -> there] here$ 

e permitem que você faça tudo o que você esperaria de uma "arma de portal", aplicada ao contexto da bash-shell:

me@host ~$ cd /very/long/path
me@host /very/long/path$ pOrange # create orange portal
me@host [orange -> .portal.closed] /very/long/path$ cd /some/other/directory
me@host /some/other/directory$ pBlue # create blue portal
me@host [blue -> path] /some/other/directory$ mv file.txt [orange] # move stuff through portal

Na minha experiência, isso torna o uso de mv e cd mais confortável, especialmente ao trabalhar com vários shells. Talvez você ache útil, talvez você considere legal ter uma arma de portal em seu bash:)

Assuntos de teste motivados são bem-vindos. Feedback construtivo será muito apreciado.

    
por Andrey Tyukin 12.11.2014 / 03:00
0

Talvez seja mais fácil criar apenas links simbólicos temporários em vez de variáveis.

Também não é tudo "não prático" para usar o preenchimento automático / sugestões de "guias". Mas pode depender do indivíduo .bashrc, não tenho certeza.

    
por fried penguin 12.11.2014 / 06:55
-1

Por que não usar variáveis para src e dest-Path? Aqui um pequeno roteiro:

IFS='
'
SRC="/PATH/TO/SOURCE-PATH"
DST="/PATH/TO/DEST-PATH"
for i in 'ls $SRC' 
do
mv $SRC/$i $DST/.
done

o IFS é importante, se você tiver nomes de arquivos com espaços. Sem o IFS, o for-loop faz em alguns ambientes uma quebra de linha nesses espaços. ( SOURCE )

    
por chris2k 08.02.2015 / 23:24