まず、背景知識: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して/
から検索を実行することです。この問題を解決するための効率的なコマンドのアイデアはありますか(ディレクトリには数十万のファイルを簡単に含めることができます)。
答え1
GNU"findutils-default"正規表現構文間隔数量子は提供されません。別の数量子を選択した場合は、GNUでテストを使用{n,m}
できます-regex
。例:find
regextype
find . -regextype posix-extended -regex '.*/[^/]{143,}$'
または
find . -regextype egrep -regex '.*/[^/]{143,}$'
または
find . -regextype posix-basic -regex '.*/[^/]\{143,\}$'
など。エスケープの有無にかかわらず、間隔をサポートするregextypes
他の機能がある可能性があります。{n,m}
find
結果を別のコマンドにパイプする代わりに、grep
これは改行全体で一致します(つまり、find
正規表現スタイルは名前とは異なり、デフォルトでは改行と.
一致します)。
答え2
努力する:
find /your/path | grep -E '[^/]{143,}$'
答え3
すでに位置データベースがある場合は非常に高速です。
locate --regex '.*/[^/]{143,}$'