1

特定のディレクトリに 31 文字を超えるディレクトリ名があるかどうかを判断する必要があります (つまり、そのルートの下を調べます)。

私は次のようなものを使用できることを知っていますfind /path/to/root/dir -type d >> dirnames.txt

これにより、完全なパスのテキスト ファイルが得られます。

必要なのは、各ディレクトリ名の実際の文字数を取得することです。上記の結果を sed または awk で解析することが理にかなっているのかどうかはわかりません。これを達成する方法についてのアイデア/考え/提案/ヒントを探しています。ありがとう!

4

3 に答える 3

2

この短いスクリプトは、すべてを一度に実行します。つまり、すべてのディレクトリ名を検索し、長さが 31 文字を超えるものを出力します (文字数も):

for d in `find  /path/to/root/dir -type d -exec basename {} \;` ; do
  len=$(echo $d | wc -c)
  if [ $len -gt 31 ] ; then
    echo "$d = $len characters"
  fi
done
于 2012-04-30T17:59:50.657 に答える
0

cmdによって作成された dirnames.txt ファイルを使用してfind、パス名の長さでデータを並べ替えることができます。

 awk '{print length($0) "\t" $0}' dirnames.txt | sort +0nr -1 > dirNamesWithSize.txt

これにより、最長のパス名 (length の値に基づく) がファイルの先頭に表示されます。

これが役立つことを願っています。

于 2012-04-30T17:53:08.043 に答える
0

これを試して

 find . -type d -exec bash -c '[ $(wc -c <<<"${1##*/}") -gt 32 ] && echo "${1}"' -- {} \; 2>/dev/null

私がマイナーだと考える 1 つのバグは、ディレクトリ名の長さを毎回 1 ずつオーバーカウントすることです。

最後のパス コンポーネントではなくパス全体が必要な場合は、次のようにします。

find . -type d | sed -e '/.\{32,\}/!d'

このバージョンにもバグがありますが、ファイル名に改行が埋め込まれている場合のみです。

両方のコマンドの出力は、基準に一致するファイル名のリストです。そこから、それぞれの長さを数えることは簡単です。

于 2012-04-30T18:20:40.623 に答える