“Cat” um arquivo aleatório no terminal

0

Eu gostaria de criar um script bash que me permita exibir um arquivo usando "cat". O problema é que exibir um arquivo simples é fácil até para mim, mas eu gostaria de exibir aleatoriamente um arquivo em uma pasta no meu terminal para que, toda vez que eu abrir um arquivo, seja exibido um arquivo aleatório.

Alguém poderia me ajudar?

edit: esses arquivos são apenas imagens feitas de caracteres ASCII, seu tamanho é de cerca de 2-3ko

    
por Thomas 15.11.2016 / 11:30

2 respostas

5

É o seu funeral. . . Eu não me responsabilizo pelo que isso fará com o seu terminal (você precisa ter certeza de que não há arquivos binários no diretório) nem quanto de porcaria será mostrado nele. Se você realmente quiser fazer isso, você pode usar (com agradecimentos a @DavidFoerster e @muru para melhorias):

#!/bin/bash
targetDir="/home/terdon/foo"
## Save the files in the array $files
files=( "$targetDir"/* )
## Cat a random file
cat "${files[RANDOM % ${#files[@]}]}"
    
por terdon 15.11.2016 / 11:52
3

Concordo com o fato de que é seu funeral, mas não se diga que impedimos você de se meter de várias maneiras:

find /some/path -type f -print0 | shuf -zn1 | xargs -0 cat

O que isso faz?

  • find ' -print0 , shuf ' -z e xargs ' -0 all combinam para lidar com entrada delimitada por NUL. Isso e / são os únicos caracteres não permitidos em nomes de arquivos, por isso é o mais seguro para passar nomes de arquivos e caminhos.
  • find produzirá uma lista de todos os arquivos (recursivamente) em /some/path .
  • shuf embaralhará as linhas de entrada e produzirá exatamente uma linha ( -n1 ).
  • xargs cat usará essa linha como um argumento para cat .
por muru 15.11.2016 / 14:58