Linux CLI에서 파일을 재귀적으로 나열하고 현재 디렉터리에 대한 상대 경로, 최대 250자

Linux CLI에서 파일을 재귀적으로 나열하고 현재 디렉터리에 대한 상대 경로, 최대 250자

이름이 250자를 초과하지 않는 모든 파일을 나열하려고 합니다(해당 파일이 속한 디렉터리, 내 명령이 있는 상대 경로 포함).

비슷한 글 본 적 있는데 , 그러나 이는 파일을 재귀적으로만 나열합니다.

이름이 250자(상대 경로 포함) 이하인 파일만 표시하도록 스크립트를 수정하는 방법에 대한 아이디어가 있습니까?

답변1

GNU 사용 find:

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

( ./250개 카운트에 포함되지 않은 접두어를 인쇄하세요).

그리고 zsh:

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

**/*이는 숨겨진 경로( )를 포함한 모든 재귀 경로 ( (D))이지만 ^유형( )의 경로 는 아닙니다.목차( /), 단 ( ~)는 ?(#c251,)251자 이상과 일치합니다.

POSIX적으로:

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

(Unix에는 파일 이름이 유효한 문자로 구성되도록 보장하는 것이 없습니다. 하나를 제외하고 zsh이러한 솔루션은 유효한 문자를 구성하지 않는 바이트 시퀀스가 ​​포함된 경로가 있는 파일을 보고할 수도 있습니다(추가하면 -path '*'이러한 파일을 제외하는 데 도움이 될 수 있음). .바이트수량의 반대수치C해당 로케일에서 )를 사용하여 로케일을 로 수정할 수 있습니다 export LC_ALL=C.

답변2

POSIX적으로:

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

POSIX 정의${#매개변수}값 인수의 문자 길이이지만 일부 셸에서는 동작이 다를 수 있습니다. bash, zsh, yash문자 수, dash바이트 수를 계산합니다. ksh93구현에 따라 임의의 버그가 있습니다.

관련 정보