OS Xを使用していて、ハードパス制限のあるMicrosoftOneDriveに接続しようとしています。ディレクトリ内で最長のパスを見つける必要があります。
次のコマンドは、実行するディレクトリの下にあるすべての通常のファイルの文字数を示し(ディレクトリを含むすべての種類のファイルの-type f
を削除します)、最も長いファイルが最後に出力されるように並べ替えます。
find . -type f -print|awk '{print length($0), $0}' | sort -n
ファイル名とディレクトリ名に改行文字が含まれていないことを前提としています。
それはあなたが望む最長のパスですか、それとも最長のファイル名ですか?の間に foo/bar/baz
とfoobar
、それはfoo/bar/baz
(最長パス)、またはfoobar
(baz
より長い名前)?
zsh
の場合:
path_length() REPLY=$#REPLY
name_length() REPLY=${#REPLY:t}
# longest name:
ls -ld -- **/*(DnO+name_length[1])
# longest path:
ls -ld -- **/*(DnO+path_length[1])
これらの長さは、バイトではなく文字数でカウントされることに注意してください。ロケールをCに変更してバイト単位でカウントすることもできますが、リモートホストでファイル名がどのようにエンコードされ、何がそのホストにカウントされるかがわかりませんlimit参照しています。たとえば、€はiso8859-15では1バイト、UTF-16では2バイト、UTF-8では3バイトでエンコードされます。