長すぎるファイル名をすべて見つけてディレクトリから削除するには、コマンドの助けが必要です。

長すぎるファイル名をすべて見つけてディレクトリから削除するには、コマンドの助けが必要です。

私は次のコマンドを使用しています:

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 {} +指示します。または、タイプに関係なくすべてのコンテンツを削除するには、次を使用します。findrm

find . -name '????????????????????*' -print -exec rm -rf {} +

シリーズを設定するには、?次のものを使用できます。

printf '%20s*' | tr ' ' '?'

(20文字)なので

find . -name "$(printf '%20s*' | tr ' ' '?')" -print -exec rm -rf {} +

おすすめ記事