Como ignorar o nome do arquivo no qual redireciona a saída da listagem de arquivos?

4

Quando estou usando o comando para encontrar todos os arquivos em um diretório e seus subdiretórios e redirecionando a saída para um arquivo result.txt, então no arquivo result.txt estou obtendo todos os arquivos incluindo o resultado.txt, mas eu Não quero o resultado.txt.

como eu estou fazendo

find . -type f > allfiles.txt

no resultado eu estou ficando como

./test1/test3/file4
./test1/file3
./test2/test4/file6
./test2/file5
./allfiles.txt

Como evitar isso?

    
por Mahendra 15.11.2017 / 12:29

2 respostas

8

Simplesmente, não coloque seu arquivo allfiles.txt no mesmo diretório que você está procurando. Coloque em outro lugar, como:

find . -type f > /tmp/allfiles.txt

Ou se tiver que estar no mesmo diretório, filtre-o com grep:

find . -type f | grep -vxF ./allfiles.txt > allfiles.txt

(assumindo que não há outros arquivos chamados ./foo\n./allfiles.txt , por exemplo)

    
por 15.11.2017 / 12:32
16

Aqui com find especificamente, você pode fazer:

find . ! -path ./allfiles.txt -type f > allfiles.txt

Mais geralmente, você pode atrasar a criação do arquivo de saída até que o comando retorne usando o comando ' sponge ' do moreutils:

ls -lRA | sponge allfiles.txt

Embora isso signifique armazenar toda a saída na memória.

Se moreutils não estiver instalado (geralmente não é por padrão), você pode implementar sponge como:

sponge() {
  perl -0777 -e '$text=<STDIN>;
                 open STDOUT, ">", shift or die$!;
                 print $text' -- "$@"
}
    
por 15.11.2017 / 12:42