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\242
8進数であると仮定します。努力する:
rename -n 's/\o{357}\o{200}\o{242}/:/g' 2018-*
このコマンドはrename
Perl 正規表現の置換とともに使用されます。ここでは、8進バイト値で指定された3文字をコロンで置き換えます。
なぜなら、-n
これはそれが何をするのかを印刷するだけです。したがって、何かを壊さずにテストできます。
これがあなたの要件を満たしていると思われる場合は、削除してください-n
。
ディレクトリツリー全体を参照する必要がある場合は、findと組み合わせることができます。
find . -depth -exec rename -n 's/\o{357}\o{200}\o{242}/:/g' {} \;
ディレクトリツリーに名前を変更する必要のないファイルが含まれていても心配しないでください。正規表現置換がファイル名を変更しない場合、ファイル名は変更されません。