Terminal: evite repetir várias vezes o diretório para acessar os arquivos

4

Eu tenho dois arquivos file1.txt , flie2.txt em um diretório X . Eu quero copiar esses arquivos para o meu diretório de trabalho atual que está longe do diretório X .

então eu acabo com um comando como:

cp ~/Desktop/dir/dir/dir/dir/file1.txt ~/Desktop/dir/dir/dir/dir/file2.txt .

Existe alguma maneira de usar o caminho do diretório uma vez para o arquivo, algum tipo de atalho?
Tenho certeza de que o Ubuntu nunca falhou com a minha preguiça: D

    
por Mhd.Tahawi 17.05.2015 / 22:32

4 respostas

5

Use [1-2] para indicar os arquivos, isso usa o recurso de expansão de intervalo de bash :

cp ~/Desktop/dir/dir/dir/dir/file[1-2].txt .

Aqui, o intervalo [1-2] será expandido, então file[1-2].txt será expandido para file1.txt e file2.txt .

Observe que, se você tiver vários arquivos como este com vários números de dígitos numéricos entre seus nomes:

file1.txt file12.txt file980.txt file0.txt file23.txt 

Nesse caso, use o recurso extglob de bash para ativar a correspondência estendida de padrões:

$ shopt -s extglob

$ cp ~/Desktop/dir/dir/dir/dir/file+([0-9]).txt .

O padrão extglob +([0-9]) corresponderá a um ou mais dígitos entre file e .txt nos nomes dos arquivos.

Observe também que não depende de nenhum prefixo ou sufixo, por exemplo, se você tiver arquivos com nomes:

1 02 043 908

Estes podem ser correspondidos (e copiados) também por:

$ cp ~/Desktop/dir/dir/dir/dir/+([0-9]) .

Verifique man bash para ter mais ideia sobre isso.

    
por heemayl 17.05.2015 / 22:39
3

Eu usaria expansão de chaves para esse tipo de coisa

cp -t ./ ~/Desktop/dir/dir/dir/dir/file{1..5}.txt

cp -t ./ ~/Desktop/dir/dir/dir/dir/{xx.x,yy.y}    
    
por steeldriver 18.05.2015 / 00:38
1

Estou usando Expansão do histórico com Designadores de palavras muito. !$ designará o último argumento do comando anterior.

Na maioria dos casos, dou uma olhada nessa pasta com ls primeiro antes de lidar.

$ ls ~/Desktop/dir/dir/dir/dir
file1.txt    file2.txt
$ cp !$/file1.txt !$/file2.txt .
cp ~/Desktop/dir/dir/dir/dir/file1.txt ~/Desktop/dir/dir/dir/dir/file2.txt .

Como você pode ver, o bash substituiu automaticamente !$ pelo último argumento do comando anterior.

Você pode até usar partes desse argumento. !$:h (h para head) designaria o dirname do último argumento. !$:t (t for tail) designaria o nome da base do último argumento.

Então, se você leu o arquivo antes com less , faria

$ less ~/Desktop/dir/dir/dir/dir/file1.txt
$ cp !$ !$:h/file2.txt .
cp ~/Desktop/dir/dir/dir/dir/file1.txt ~/Desktop/dir/dir/dir/dir/file2.txt .
    
por Germar 18.05.2015 / 01:07
1

As perguntas podem ser resolvidas usando o seguinte comando também.

cp ~/Desktop/dir/dir/dir/dir/file*.txt .

copiará todos os arquivos com o arquivo de estilo de nomenclatura (algo entre eles) .txt

    
por srk_cb 18.05.2015 / 06:29