名前が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は、ファイル名が有効な文字で構成されることを保証するものではありません。1つを除いて、これらのソリューションは、有効な文字を構成しないバイトシーケンスを含むパスを含むファイルを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