Script bash para gravar ls em um arquivo em outro diretório

0

Estou tentando escrever um script que vá para o diretório específico, ls files nesse diretório e, em seguida, grave-o em um arquivo em outro diretório. Foi isso que eu criei até agora:

#!/bin/bash
getDisk1(){
   cd cwiczenia | ls >> cd /home/kai/listaplikow.txt
   return
}

getDisk2(){
   cd Pictures | ls >> cd /home/kai/listaplikow.txt
   return
}

getDisk1
getDisk2

Estou executando o script da pasta /home/kai/ , mas getDisk2 não está escrevendo nenhum resultado para o destino. Alguém pode me ajudar com isso?

    
por K.Mazur 26.02.2018 / 18:16

2 respostas

3

Seus comandos são um absurdo:

  cd Pictures | ls >> cd /home/kai/listaplikow.txt

"Vá para o diretório Pictures . Canalize a saída (nula) do comando cd para ls , que não recebe entrada padrão. Envie a saída ls 'para um arquivo chamado cd . "

O que você provavelmente quer é algo como:

( cd Pictures; ls >> /home/kai/listaplikow.txt )

A razão pela qual isso está em parens é que ele é executado em um subshell e não (tenta) alterar o diretório de trabalho do script subjacente.

De qualquer forma, é uma má ideia analisar a saída de ls em geral. Pode ser melhor fazer algo como:

find Pictures/ -maxdepth 1 >> /home/kai/listaplikow.txt

Se você não gosta de ver o caminho em que os arquivos estão, ainda é melhor usar find para obter a lista de arquivos:

find Pictures/ -maxdepth 1 -print0 | xargs -0 -L1 basename >> /home/kai/listaplikow.txt
    
por 26.02.2018 / 18:22
0

Altere sua sintaxe:

cd cwiczenia | ls >> cd /home/kai/listaplikow.txt

para

cd cwiczenia && ls >> /home/kai/listaplikow.txt

Explicação:

  • && : certifique-se de que o comando anterior cd seja bem-sucedido antes que o comando ls seja executado.
por 26.02.2018 / 18:22