1.6 - Caminho Absoluto, Caminho Relativo e Caracteres Coringa
Até aqui, temos usado o que chamamos de Caminho Absoluto (Absolute Path) para endereçar os arquivos e diretórios que usamos. Mas existem atalhos especiais que nos ajudam a facilitar a descrição de caminhos baseados no diretório atual em que nos localizamos.
Uma das opções disponíveis no comando ls é a opção -a ou --all, que deixam de ignorar certos arquivos que normalmente não são exibidos. Por padrão, os arquivos que começam com . (ponto), ficam ocultos normalmente no comando ls. Vamos ver quais arquivos visualizamos ao usar esta opção:
Dentre os novos arquivos que antes não eram exibidos, existem dois diretórios especiais: . e ...
Estes diretórios são usados para nos referirmos a Caminhos Relativos (Relative Paths). O diretório ., aponta para o diretório atual, onde a sessão do bash está localizada (o diretório onde você se encontra e que será exibido com o comando pwd).
Já o diretório .., aponta para o diretório pai do diretório atual, imediatamente superior na hierarquia de diretórios, o diretório que antecede o diretório atual na saída do comando pwd.
Ambos estes diretórios podem ser usados como atalho para execução de comandos, como os comandos que usamos até aqui:
# Criando alguns elementos para demonstrar caminhos relativos
cd ~
mkdir -p teste/a/b/c
cd teste/a/b
touch c/teste.txt
cp c/teste.txt .. # copia o arquivo dentro do diretório c para ~/teste/a
mv c/teste.txt . # move o arquivo dentro do diretório c para ~/teste/a/b
rm ../teste.txt # exclui o arquivo teste.txt do diretório ~/teste/a
cp teste.txt ../.. #copia o arquivo teste.txt do diretório atual para ~/teste
ls -lha ../.. # lista os arquivos do diretório ~/teste
Outro atalho útil para comandos usando o bash (e outros shells também costumam suportar), são Caracteres Coringa (Wild Cards), usados para selecionar arquivos que correspondem com a alguns padrões em seus nomes. Para demonstrar isto, vamos antes criar alguns arquivos:
Existem dois caracteres coringas: ? e *.
- o ? serve como uma forma de se referir a qualquer caractere que esteja em uma determinada posição no nome do arquivo. Por exemplo:
ls foo? # Lista todos os arquivos cujo nome começam com `foo` e que possuem qualquer outro caractere único em seguida
Note que, como resultado deste comando, os arquivos foo1 e foo2 foram os únicos exibidos. Os demais arquivos foram ignorados por não combinarem com o padrão, pois foo não possui nenhum caractere na posição onde o ? se encontra, e foo10 possui ainda um caractere a mais (já o arquivo bar não corresponde em absolutamente nada com o padrão usado).
- o
*serve como uma forma de se referir a quaisquer combinação de zero ou mais caracteres que possam estar em uma determinada posição no nome dos arquivos. Por exemplo:
Desta vez, são listados todos os arquivos que começam com foo, independente de quantos caracteres a mais eles possuem ou não. O arquivo bar, como antes, é ignorado por não corresponder ao padrão.
Você pode usar os caracteres coringa para designar arquivos e diretórios como argumentos para qualquer comando do Bash. Por exemplo: