最初に背景を説明します。Synologyで暗号化されていない共有フォルダを暗号化されたフォルダに変換しようとしていますNASこのエラーが表示されています:
したがって、問題のあるファイルを見つけて、名前を変更できるようにしたいと思います。次のgrep
コマンドを考え出しました:grep -rle '[^\ ]\{143,\}' *
が、143文字を超えるパスを持つすべてのファイルを出力します。
#recycle/Music/TO SORT/music/H/Hooligans----Heroes of Hifi/Metalcore Promotions - Heroes of Hifi - 03 Sly Like a Megan Fox.mp3
...
私が望むのは、grepが/
で分割してから検索を実行することです。これに対処するための効率的なコマンドに関するアイデアはありますか(ディレクトリには数十万のファイルが簡単に含まれます)?
試してください:
find /your/path | grep -E '[^/]{143,}$'
GNU 'findutils-default' regular expression syntax は{n,m}
インターバル数量詞を提供しませんが、-regex
テストを使用できますGNU find
別のregextype
を選択した場合、例えば:
find . -regextype posix-extended -regex '.*/[^/]{143,}$'
または
find . -regextype egrep -regex '.*/[^/]{143,}$'
または
find . -regextype posix-basic -regex '.*/[^/]\{143,\}$'
エスケープの有無にかかわらず、{n,m}
間隔をサポートする他のregextypes
が存在する場合があります。
find
の結果を別のgrep
コマンドにパイプすることと比較すると、これは改行全体で一致します(つまり、find
正規表現のフレーバーは、その.
の名前とは異なります)デフォルトでは改行文字に一致します)。
すでにlocate dbを持っているなら、これは非常に高速です。
locate --regex '.*/[^/]{143,}$'