Qual é a diferença entre (cp f1.txt f2.txt) e (menos f1.txt f2.txt) [duplicado]

2

Eu sei que ambos copiarão dados de f1.txt para f2.txt, mas qual é a diferença real?

(cp f1.txt f2.txt) 

vs:

(less f1.txt > f2.txt)
    
por Shoaib Hassan 10.03.2015 / 20:56

4 respostas

6

A diferença é que cp é muito mais claro para os humanos. Essa é uma das primeiras coisas que você deve otimizar.

Usar less deste modo é tão obscuro que não é óbvio que funcione a menos que você o teste. A outra resposta indica que isso não funciona - se o seu arquivo contém determinados caracteres e se espera que o comando funcione sem interação do usuário, por exemplo, como parte de um script. Essa limitação é também obscura (pelo menos eu não pensei nisso, apesar de ter visto esse comportamento muitas vezes).

less é mais lento, uma das razões é que transfere dados em partes menores. Execute-os em strace , vejo less chunks 1023 bytes (1KiB - 1); pedaços cp 64 KiB.

    
por 10.03.2015 / 21:26
3

less foi projetado como um pager (por exemplo, com próxima página função) para arquivos texto . Como tal, é menos otimizado para copiar arquivos do que o cp (que foi projetado para copiar dados) e pode ter uma sobrecarga considerável, com falta de desempenho.

Para iniciantes, cp não pedirá confirmação ao manipular arquivos que contenham caracteres especiais (por exemplo, controle).

No seu exemplo cp , você precisa executar exatamente o um programa ( cp ).

No exemplo less , o comando less envia apenas o conteúdo do arquivo fornecido para stdout e seu shell redireciona o stdout para um novo arquivo, portanto, você está executando dois programas (uma saída, e uma entrada).

    
por 10.03.2015 / 21:07
2
  • A variante cp é mais rápida porque não copia f1.txt do conteúdo para a tela:

    $ time cp f1.txt  f2.txt
    
    real    0m0.002s
    user    0m0.004s
    sys     0m0.000s
    $ rm f2.txt
    $ time less f1.txt > f2.txt
    
    real    0m0.009s
    user    0m0.004s
    sys     0m0.000s
    

0,002 para cp vs 0,009 para less .

  • cp pode salvar alguns bits de modo do arquivo original, enquanto less cria um novo arquivo com modos de acordo com umask value:
(...) each destination file is created
with the mode bits of the corresponding source file, minus the
bits set in the umask and minus the set-user-ID and set-group-ID
bits.
  • cp é menor para digitar. Sério, é importante quando você passa a maior parte do tempo na linha de comando.
por 10.03.2015 / 21:18
0

Indo em uma tangente aqui, já que você está perguntando sobre *.txt arquivos, há um pequeno benefício de usar less , que é usar o seu pre-processando recurso para "modificar a forma como o conteúdo do arquivo é exibido". Um exemplo planejado seria a saída do conteúdo de um arquivo compactado para a saída:

less compressed.txt.gz > uncompressed.txt

Mas é claro que isso pode, e provavelmente deve, ser feito melhor por zcat -c compressed.txt.gz > uncompressed.txt .

Ainda assim, acredito que isso possa ser prático para ambientes em que o pré-processamento less é padronizado (verifique a variável de ambiente LESSOPEN , que geralmente aponta para um arquivo /usr/bin/lesspipe.sh ), que scripts / comandos não precisam se preocupar com analisar o arquivo de entrada no arquivo de destino .

Eu também encontrei este link onde mostra mais casos de uso. Como mencionado acima, verifique o /usr/bin/lesspipe.sh do seu ambiente Linux para ver quais são as variedades de arquivos dos quais less pode extrair informações textuais.

    
por 11.03.2015 / 05:09