正規表現パターンを使用して無効なファイル、ディレクトリ、およびサブディレクトリの名前を変更する

正規表現パターンを使用して無効なファイル、ディレクトリ、およびサブディレクトリの名前を変更する

Linuxでは、次のパターンで作成された複数のディレクトリ、サブディレクトリ、およびファイル名があります。YYYY - mm - DD 時間 ヘヘ : mm : 春夏シーズン(明確にするためにスペースを追加しましたが、ディレクトリ/サブ/ファイル名にスペースはありません。YYYY、MM、DD...は整数で、「-」、「T」、「:」は式の定数です)。

これらのディレクトリ/ファイルはWindowsにコピーされ、その後Linuxにコピーされ、「:」が破損しています。 ':'がなければならないすべての場所に '\357\200\242'がありますls

mvとの組み合わせを使用してこの問題を解決することはあまりにも複雑ではありませんが、sedパイプ、正規表現、およびsed使用法は非常に錆びていました。

これまで私はこれを持っています

for a in *T*???*???*; do mv "$(echo "$a" | sed [***])"; done

[***]正規表現でなければならず、途中に2桁の数字が含まれるように*T*???*???*変更する必要があります。ファイルとディレクトリの名前を再帰的に変更する必要があります。私もこれがここで使用するのに適した入力モードではないと思います。*T*:*:**???

代替方法

find私はandの組み合わせを提供する多くの投稿を見ましたがrename、やはり私は正規表現に少し錆びていて、この状況に対する良い解決策を見つけることができませんでした。

答え1

\357\200\2428進数であると仮定します。努力する:

rename -n 's/\o{357}\o{200}\o{242}/:/g' 2018-*

このコマンドはrenamePerl 正規表現の置換とともに使用されます。ここでは、8進バイト値で指定された3文字をコロンで置き換えます。

なぜなら、-nこれはそれが何をするのかを印刷するだけです。したがって、何かを壊さずにテストできます。

これがあなたの要件を満たしていると思われる場合は、削除してください-n

ディレクトリツリー全体を参照する必要がある場合は、findと組み合わせることができます。

find . -depth -exec rename -n 's/\o{357}\o{200}\o{242}/:/g' {} \;

ディレクトリツリーに名前を変更する必要のないファイルが含まれていても心配しないでください。正規表現置換がファイル名を変更しない場合、ファイル名は変更されません。

関連情報