2012-04-30 14 views
1

特定のディレクトリに31文字を超えるディレクトリ名があるかどうかを判断する必要があります(つまり、そのルートの下を見ます)。ディレクトリ名の長さを再帰的にチェック

は、私は私の完全なパスのテキストファイルを与えるfind /path/to/root/dir -type d >> dirnames.txt

このようなものを使用することができます知っています。

私が必要とするのは、各ディレクトリ名の実際の文字数を取得することです。上記のw/sedまたはawkの結果を解析することが意味をなさないかどうかは不明です。これを達成するためのアイデア/思考/提案/ヒントを探してください。ありがとう!

+1

ディレクトリ名の長さまたは完全なパスの長さを指定しますか? – Sorpigal

答えて

0

あなたfind cmdで作成したdirnames.txtファイルを使用して、その後、すなわち

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

これは、(長さの値に基づいて)最も長いパス名を提示する、パス名の長さによってデータをソートすることができますファイルの先頭に。

こちらがお役に立てば幸いです。

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 
+1

ありがとう、これはトリックでした! –

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' 

を。

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

関連する問題