이름이 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
구현에 따라 임의의 버그가 있습니다.