私は、次のように、find
20以上の特定の種類()を含むすべての.txt
フォルダを見つけるために使用します。
find . -type f -iname '*.txt' -printf '%h\n'|sort|uniq -c | awk '$1 > 20'
出力は次のとおりです。
44 ./fold9863
202 ./fold689
122 ./fold45
202 ./fold2
数字は各フォルダの .txt ファイル数を示します。 findを使用して数字なし(そして先行なし)、スペースで区切られた./
フォルダ名を取得する方法はありますか?このように:
fold9863 fold689 fold45 fold2
答え1
次のコードは、フォルダ名をスペースで区切って1行に印刷します。
find . -type f -iname '*.txt' -printf '%h\n'|sort|uniq -c | \
awk '$1 > 20 { sub("^[.]/","",$2); printf("%s ",$2) } END { printf("\n") }'
フォルダ名にスペースが含まれていると、このリストを使用すると問題が発生する可能性があります。次の名前を参照できます。
find . -type f -iname '*.txt' -printf '%h\n'|sort|uniq -c | \
awk '$1 > 20 { sub("^[.]/","",$2); printf("\"%s\" ",$2) } END { printf("\n") }'
行の末尾に余分なスペースがありますが、追加のコードも防止されます。 1つの可能性:
find . -type f -iname '*.txt' -printf '%h\n'|sort|uniq -c | \
awk '$1 > 20 {sub("^[.]/","",$2);printf("%s\"%s\"",X,$2);X=" "} END {printf("\n")}'
答え2
式をこの式に置き換えると、フォルダ名の先頭がすべてawk
削除されます。./
awk '$1 > 20 { sub("^\\./", "", $2); printf "%d\t%s\n", $1, $2 }'
列の代わりに行でフォルダ名を取得するには、awk
もう一度変更してください。今回は数字が印刷されないようにしてください。
awk '$1 > 20 { sub("^\\./", "", $2); printf "%s ", $2 } END { printf "\n" }'