私は次のコマンドを使用しています:
find . | awk 'function base(f){sub(".*/", "", f); return f;} \
{print length(base($0)), $0}'| sort -nr | head -2
ファイル名が長すぎるいくつかのファイルを見つけることができますが、すべてが見つからず、削除しません。
これを行うにはどのコマンドを使用できますか?
ベストアンサー1
GNUがある場合は、find
正規表現を使用して、指定された長さよりも名前の長いファイルを見つけることができます。たとえば、次は20文字以上の名前のファイルを探します。
find . -regextype egrep -regex '.*/[^/]{20,}$'
以下を追加してこれらのファイルを削除できます-delete
。
find . -regextype egrep -regex '.*/[^/]{20,}$' -print -delete
GNUがない場合は、以下をfind
計算できます?
。
find . -name '????????????????????*'
以下を使用してファイルを削除します-exec rm
。
find . -name '????????????????????*' -type f -print -exec rm {} +
-type f
ファイルのみが一致することを確認し、できるだけ多くのファイルを一度に実行するように-exec rm {} +
指示します。または、タイプに関係なくすべてのコンテンツを削除するには、次を使用します。find
rm
find . -name '????????????????????*' -print -exec rm -rf {} +
シリーズを設定するには、?
次のものを使用できます。
printf '%20s*' | tr ' ' '?'
(20文字)なので
find . -name "$(printf '%20s*' | tr ' ' '?')" -print -exec rm -rf {} +