Atalho da linha de comando para o diretório atual semelhante a ~ para o diretório inicial?


23

Quando eu uso o comando cp ou move em uma janela de terminal, atualmente estou com o bash em uma determinada pasta como esta.

NES@server:~/Desktop/dir1$

E agora eu quero copiar um arquivo daqui ~/anotherdir/dir2para a pasta escolhida atual no bash (dir1) eu usaria o comando

cp ~/anotherdir/dir2/file ~/Desktop/dir1

existe uma cadeia de atalhos para se referir ao diretório escolhido atualmente? Para que neste exemplo eu não precise fornecer o caminho completo para o diretório de destino, mas o comando sabe que ele deve usar o diretório escolhido atualmente no bash? ou seja, como ~ significa o diretório inicial?

Respostas:


41

Seu diretório atual é .. Então, cp /foo/fam/foo .copia o arquivo para o seu diretório atual.

A construção análoga para "um diretório ativo" ou o diretório pai do seu diretório de trabalho atual é de dois pontos, ou seja ..,. (Obrigado @djeikyb.)

Então, a partir de /usr/house/firstfloor/basement, o cd ..leva você um nível até /usr/house/firstfloor.

No mesmo exemplo (a partir de /usr/house/firstfloor/basement, o comando cd ../..levaria você para /usr/house.

Você também pode usar $PWDcom echopara obter seu diretório atual:

echo $PWD

Aliás, $OLDPWDlhe dará seu diretório anterior. (Que bashvocê também pode acessar digitando cd -.)


3
Um bom momento para aprender que ..significa um diretório mais baixo. Pode ser usado várias vezes, ou seja,cd ../..
djeikyb

1
@djeikyb - você quis dizer acima, tenho certeza. Portanto, o cd ..levará você ao diretório pai do seu diretório atual. Bom ponto.
11231 belacqua

1
E eu iria falar popde pushd, mas que está se transformando em um ensaio.
11231 belacqua

2
Uma pequena diferença a ser lembrada: .e ..no nível do sistema de arquivos, qualquer programa os aceitará. Por outro lado, atalhos como ~e ~-fazem parte do shell.
grawity

2
+1 para cd -; não sabia que existia.
jg-faustus


3

./ representa o diretório atual. Então você pode usar o comando cp ~/anotherdir/dir2/file ./Isto copiará o arquivo "arquivo" no diretório de trabalho atual.


3
Você não precisa da barra "." é suficiente também. barra (como delimitador de componente de caminho) só é necessária se você quiser colocar outro componente de caminho depois dele, mas é mais fácil apenas sair ./, já que caminhos relativos significam começar com o diretório atual de qualquer maneira :)
LGB

Eu sei / não é necessário, mas. sozinho me parece confuso porque. também é usado para executar comandos de um arquivo no shell atual, por exemplo ". envsetup.sh". Portanto, adicionar um / no final apenas torna mais claro.
11267 binB

1
Tangencialmente, se você fizer isso ln -s /some/long/path/to/get/to/cake sem um segundo argumento , ele colocará o cakelink simbólico em sua corrente diretamente. Muito bom para os preguiçosos. Salva a ..
23411 belacqua

2

Para usar o diretório atual como o diretório de destino, use um único ponto ' .'

Resposta longa

Usando seu exemplo, você digitaria: cp ~/anotherdir/dir2/file .

Para ver o ponto ., ..e ../../nomes de diretório em ação, copie e cole os seguintes comandos em seu Terminal:

mkdir a && mkdir a/b && mkdir a/b/c && mkdir a/b/c2
cd a/b/c
cp /etc/default/grub .
cp /etc/default/grub ..
cp /etc/default/grub ../c2
cd ../../
tree

A saída do comando em árvore aparece assim:

.
└── b
    ├── c
       └── grub
    ├── c2
       └── grub
    └── grub

3 directories, 3 files

A .saída na parte superior da árvore representa o novo diretório atual, a que é o avô do a/b/cqual navegamos usando o cd ../../comando Debaixo avemos os sub-diretórios a/b, a/b/cea/b/c2

Análise linha por linha

Primeiro, criamos 4 diretórios em uma linha usando &&para unir várias linhas.

Em seguida, mudamos para o diretório a/b/c, que é o diretório atual para os seguintes comandos de cópia:

  • No primeiro comando de cópia ( cp), definimos o destino para o diretório atual ( c ) com ..
  • No segundo comando de cópia, definimos o destino no diretório pai ( b ) com ...
  • No terceiro comando de cópia, definimos o destino no diretório irmão ( c2 ) com../c2

Então, como declarado anteriormente, alteramos o diretório atual para ae executamos o treecomando para exibir todos os diretórios e arquivos em a.

Limpar

Depois que terminamos, removemos os três diretórios e arquivos com:

cd ~/
rm -r tree


1

Você pode usar o ponto ( .), a ~+ expansão do til , o pwdcomando ou a variável $ PWD para representar o diretório ativo atual (CWD). Todos estes comandos podem fazer isso:

  1. mv file_old_dir .
  2. mv file_old_dir ~+
  3. mv file_old_dir $(pwd)
  4. mv file_old_dir $PWD

0

Sim (como outros observaram), o diretório atual é ".", É por isso que você pode iniciar programas / script a partir do diretório atual com ./script (apenas o script não funcionará, a menos que. Não faça parte do PATH, o que não é recomendado Apesar). Usar $ PWD ou $ (pwd) é um pouco exagerado, mesmo que outros tenham mencionado que usar um caractere de ponto único seja mais curto, com certeza :) ".." é o diretório pai, com certeza "/" é a raiz. Também é bom mencionar que "cd -" o colocará no diretório anterior onde você estava antes de alterar o cwd (diretório de trabalho atual). Também pode ser útil no trabalho diário. Um único comando "cd" sem nenhum outro na linha de comando o colocará em "~" (sua casa).


1
$PWDnão é um exagero ao criar links simbólicos para caminhos absolutos.
11111 ulidtko

Pensei no exemplo "cp" onde ele está, com certeza. Mesmo com links simbólicos, isso depende da situação: "ln -s / this / file." criará um link simbólico no diretório atual, apontando o arquivo / this / file com o nome "file" (as pessoas costumam pensar que é como "cp" apenas não copiar dados, apenas algum tipo de link: não é uma definição correta, mas é um bom começo ) No entanto, a construção oposta: "ln -s. / This / dir" é um pouco interessante (crie um link simbólico como / this / dir com referência ao diretório atual), mas acho que está fora do escopo do tópico original, e não era a questão também.
LGB
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.