Lista os arquivos recursivamente no Linux CLI com o caminho relativo ao diretório atual, max 250 caracteres

2

Estou tentando listar todos os arquivos com nomes de no máximo 250 caracteres (incluindo o diretório do qual faz parte, do caminho relativo em que meu comando está dentro).

eu já visto um tópico semelhante , mas isso listará apenas os arquivos recursivamente.

Alguma ideia de como modificar o script para mostrar apenas arquivos com nomes de no máximo 250 caracteres (incluindo o caminho relativo)?

    
por tuckker 29.04.2015 / 15:02

2 respostas

4

Com o GNU find :

find . -regextype posix-extended ! -regex '.{253,}' ! -type d

(que imprime um prefixo ./ que não está incluído na contagem 250).

com zsh :

setopt extendedglob # if not already in your ~/.zshrc
printf '%s\n' **/*~?(#c251,)(D^/)

Isso é todos os caminhos recursivamente ( **/* ) incluindo os ocultos ( (D) ), mas não ( ^ ) os do tipo diretório ( / ), exceto ( ~ ) aqueles que correspondem a ?(#c251,) , ou seja, que contêm 251 caracteres ou mais.

POSIXly:

find . ! -path "$(printf %253s | tr ' ' '?')*" ! -type d

(note que não há nada no Unix que garanta que os nomes dos arquivos sejam feitos de caracteres válidos. Exceto pelo zsh one, essas soluções também podem reportar arquivos cujo caminho contenha seqüências de bytes que não formam caracteres válidos -path '*' pode ajudar a excluí-los) Se você deseja corresponder ao número de bytes em oposição ao número de caracteres em sua localidade, você pode corrigir a localidade para C com export LC_ALL=C ).

    
por 29.04.2015 / 15:59
3

POSIXly:

$ find . -type f -exec sh -c '
    for f do
      [ "${#f}" -le 252 ] &&
      printf "%s\n" "$f"
    done
' sh {} +

POSIX definido $ {# parâmetro} como o comprimento em caracteres do parâmetro value , mas o comportamento pode variar em algumas conchas. bash , zsh , yash caracteres de contagem, dash count bytes. ksh93 tem um erro aleatório depende da sua implementação.

    
por 29.04.2015 / 15:35