Existe uma maneira equivalente de lembrar diretórios em volumes montados como DOS

5

Há algum tempo, mudei de um ambiente puramente Windows para o Windows e o Mac.

Embora eu esteja lentamente me acostumando com o meu Mac e o amando, há algumas coisas que me frustram.

Um deles é o fato de que existe apenas 1 diretório de trabalho no sistema de arquivos.

Isso pode parecer estranho para aqueles que já executaram o Unix, mas siga isso como minha experiência no Windows.

Eu tenho C: (programas), D: (dados), E: (CD / DVD) e F: & G: (chaves USB).

Se eu digitar ...

CD /D F:\Dir1\Dir2
CD /D D:\Dir3\Dir4
F:
CD
D:
CD

assumindo que todos são caminhos válidos, a saída será ...

F:\Dir1\Dir2
D:\Dir3\Dir4

Isso mostra que posso trocar entre "drives" e recebo o último diretório de trabalho por unidade.

Isso é realmente útil quando você deseja copiar o conteúdo de uma unidade para outra, sem precisar digitar o caminho inteiro.

Você pode ir ao diretório, verificar seu conteúdo, mudar para a unidade / diretório de destino e então iniciar a cópia ...

COPY F:*.* D:.

por exemplo.

Quando se trata do meu Mac, embora eu possa usar a interface do usuário com duas guias do Finder, ainda gostaria de poder usar a linha de comando.

Existe uma maneira equivalente de ter um sistema de arquivos montado lembrando e expondo o último diretório de trabalho naquele sistema de arquivos?

No momento, é a abordagem "digite todo o comando completamente".

    
por Richard A Quadling 31.05.2015 / 09:56

7 respostas

4

Sua pergunta é sobre os recursos do bash, que é provavelmente o shell que você está usando como linha de comando.

Para a parte de mudança, você pode usar cd - para voltar ao diretório anterior.

Se você quiser referenciar o diretório anterior em um comando, você pode usar $OLDPWD da seguinte forma:

 cp $OLDPWD/* .

Veja também help pushd , help popd e geralmente man bash .

    
por 31.05.2015 / 10:18
6

Você deve estar ciente de que a maneira do Windows (na verdade, a maneira DOS) é uma conseqüência de ter um mapeamento rígido para os "dispositivos" de baixo nível representados por caracteres ( A: , C: , etc.).

O Unix tem (basicamente) apenas uma árvore de diretórios e você acessa-a mais uniformemente do que no DOS. Você tem várias possibilidades para acessar o sistema de arquivos. Aquele que você pode conhecer do mundo DOS é gráfico, orientado por janelas; veja por exemplo xfe para um candidato. O outro acesso mais "nativo" é através do shell. As várias conchas têm capacidades diferentes. Você pode querer (para uso interativo pesado) dar uma olhada em tcsh , mas nos shells POSIX comumente usados ( bash , ksh , zsh ) você realmente tem o conceito de um diretório de trabalho . Você pode navegar entre diretórios com cd e uma variante específica é cd - para alternar para o anterior. A partir de um diretório, você pode acessar o diretório anterior usando as variáveis de shell predefinidas $OLDPWD ou a respectiva expressão til ~- (que se assemelha ao acima mencionado cd - ). Com esses você pode, digamos, cp ./* ~- . O ksh tem ainda um cd mais poderoso que facilita o salto entre os respectivos subdiretórios de diferentes árvores de versões; por exemplo, cd gawk-3.1.6 gawk-4.1.2 salta de qualquer subdiretório dessas variantes para o respectivo outro. Em alguns shells há também dois comandos pushd e popd disponíveis (nativamente ou através de uma biblioteca) para memorizar os diretórios que você quer revisitar. Depois, há o conceito de CDPATH , permitindo que você pule para diretórios comumente usados sem especificar totalmente os caminhos completos. - Eu escrevi tudo sobre a mudança de diretórios, porque é a base para fazer o melhor uso do $OLDPWD ou resp. ~- que mencionei antes em seus comandos shell. A descrição não estaria completa sem os recursos de comando e conclusão do caminho mencionados; geralmente com a tecla Tab você pode completar os comandos, de forma que, mesmo que você explicitamente "escreva" os caminhos, o shell ajudará você a fazer isso muito rapidamente. E por último, mas não menos importante, há a história da concha; você tem acesso a comandos previamente digitados, pode editá-los e / ou re-invocá-los conforme desejado.

    
por 31.05.2015 / 10:28
4

Vou adicionar outra opção / truque.

Ele usa links simbólicos, são muito úteis. Eles são um pouco parecidos com atalhos, mas, na maioria das vezes, melhor (exceto quando atalhos são usados como scripts de wrapper, nesse caso, scripts de wrapper são melhores).

Ele também usa a variável CDPATH do bash.

cd ~
mkdir drive-letters
cd drive-letters
ln -s / c:
ln -s "$HOME" h:
ln -s /media/cdrom/ e:
CDPATH=".:~/drive-letters" # you will have to put this one in your ~/.bashrc to make it persistent

Agora você pode fazer:

cd c:
cd e:
    
por 31.05.2015 / 12:16
3

Vou sugerir uma solução que não solucionará todos os seus problemas, mas ajudará você a mudar muito mais rápido !!

A solução está usando o autojump .

Instale-o no Mac usando:

 brew install autojump

Então, o que autojump faz é lembrar de todos os diretórios que você visitou anteriormente. Ele mantém pontuação para vários diretórios, para que o diretório mais visitado obtenha uma pontuação maior.

Em seguida, você alterna rapidamente para um diretório usando um comando simples da seguinte maneira:

#Say you want to visit this:
cd /media/windows/users/myuserdir

#Instead do this: 
j myuserdir

Como isso acontece, ele corresponde a palavra-chave myuserdir com um diretório que contenha a palavra-chave e tenha a pontuação mais alta. Mesmo se você cometer algum erro de ortografia, ele tentará encontrar a melhor correspondência com base no seu histórico.

    
por 31.05.2015 / 12:26
2

Se você está se referindo a partições físicas, elas são montadas em /Volumes/PartitionName no Mac.

Seu F: \ Dir1 \ Dir2 seria /Volumes/PartitionName/Dir1/Dir2/ 'NIX não se lembra do "diretório atual" em cada volume, mas você pode salvá-los em variáveis de ambiente, por exemplo,

CD_1='pwd'

salvaria o diretório atual, que você pode acessar com $ CD_1

Outra opção é criar symlinks para diretórios de interesse.

    
por 31.05.2015 / 11:43
2

Os sistemas Unix tornam a separação entre os volumes o mais simples possível. Muito poucos programas se importam com o volume (sob o ponto de montagem) de um arquivo. É apenas irrelevante.

Existem muitos recursos para “lembrar” vários diretórios. Procure instalações associadas a diretórios ou com strings em geral, não para instalações associadas a vários volumes: essas instalações não se importam se em quais volumes os diretórios estão.

Um recurso muito genérico de "lembrar" é definir uma variável. Essa variável pode conter o caminho para um diretório ou qualquer string que você queira colocar lá. Em um shell no estilo Bourne (zsh, bash, ksh, etc.):

f=/media/usb1/dir1/dir2
d=~/dir3/dir4
cp $f/* $d/*

Se os valores contiverem espaços ou \[*? , tenha cuidado com os shells no estilo Bourne diferentes de zsh, você precisará de aspas duplas em torno das substituições de variáveis:

cp "$f"/* "$d"/*

Você deve sempre usar aspas duplas em scripts, mas na linha de comando, já que você geralmente sabe o que há na variável, você pode omiti-las a menos que saiba que a variável contém espaços.

Para navegar rapidamente entre vários diretórios, você pode usar a pilha de diretórios . Exemplo:

cd /media/usr1/dir1/dir2
ls
pushd ~/dir3               # Remember /media/usr1/dir1/dir2 and go to ~/dir3
ls
cd dir4                    # Go to ~/dir3/dir4, /media/usr1/dir1/dir2 is still remembered
dirs                       # Show the directory stack
cp ~1/* .                  # Copy files from /media/usr1/dir1/dir2
popd +1                    # Forget /media/usr1/dir1/dir2
    
por 31.05.2015 / 23:50
1

O Unix e o Windows colocam arquivos em determinados locais.

O arquivo de programas fica em um só lugar. dados em outro, dados da unidade usb em outro. Ambos sistemas suportam acesso a dados / dispositivos para os diferentes usos.

A diferença é exatamente como .
No Windows, você recebe acesso direto a dispositivos físicos. No Unix / Linux existe apenas uma árvore do sistema de arquivos e, em seguida, diretórios e outros - vários dispositivos são mapeados para ele. Assim, / dir / x / y e / dir / x / z podem estar em dispositivos totalmente diferentes. Além disso, todos os dispositivos brutos, como discos rígidos e unidades USB, também estão disponíveis no diretório / dev.

Alguns exemplos "traduzidos":

Windows             Linux                  Mac

c:\Program Files    /bin                   /bin
e:\                 /home                  /home
f:\ (usb)           /media/my-usb-drive    /Volumes/my-usb-drive

para responder suas outras perguntas - copiar de 'c' para 'e' é tão simples no Linux - você cp (copy) de /some/location to /media/my-usb-drive

Se você quiser se referir ao diretório de trabalho atual, você pode usar $PWD e, se quiser se referir a um diretório em que estava, pode usar $OLDPWD

Você pode precisar aprender mais sobre:

  • Formatos de disco - o que funcionaria no sistema *
  • Como formatar um pendrive
  • Compactando arquivos grandes para transferência entre sistemas

* olhe para o NTFS - link

Seu título menciona "uma maneira de lembrá-los".

Você pode usar aliases: se digitar

alias p='cd /bin'

ou

alias programs='cd /bin'

então você pode simplesmente digitar p [return] ou programar [return] para ir para esse diretório.

Além disso, o último diretório de trabalho é o OLDPWD, por exemplo

$ cd tmp
$ cd ~
$ echo $OLDPWD
/home/durrantm/tmp
    
por 31.05.2015 / 12:38