web-dev-qa-db-ja.com

最長のファイルパスでディレクトリを見つけて並べ替えるにはどうすればよいですか?

OS Xを使用していて、ハードパス制限のあるMicrosoftOneDriveに接続しようとしています。ディレクトリ内で最長のパスを見つける必要があります。

1
joseph.hainline

次のコマンドは、実行するディレクトリの下にあるすべての通常のファイルの文字数を示し(ディレクトリを含むすべての種類のファイルの-type fを削除します)、最も長いファイルが最後に出力されるように並べ替えます。

find . -type f -print|awk '{print length($0), $0}' | sort -n

ファイル名とディレクトリ名に改行文字が含まれていないことを前提としています。

3
joseph.hainline

それはあなたが望む最長のパスですか、それとも最長のファイル名ですか?の間に foo/bar/bazfoobar、それはfoo/bar/baz(最長パス)、またはfoobarbazより長い名前)?

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バイトでエンコードされます。

1