0

カスタムバッチ名前変更ファイル

こんにちは、MacOSXは非常に長いファイル名の形式でスクリーンショットを撮ります。パス/Users/ me/desktopにあるものの名​​前を変更したいと思います。

ファイル名の例を次に示します。

Screen Shot 2012-08-02 at 1.15.29 AM.png
Screen Shot 2012-08-02 at 1.22.12 AM.png
Screen Shot 2012-08-02 at 1.22.14 PM.png
Screen Shot 2012-08-02 at 1.22.16 PM.png

私はかつて、に対してforループを実行しないように言われたlsので、今回はグロブを試みています。これまでのところ、これが私が思いつくことができるすべてですが、式をカレンラップし、それを私が望む形式でファイル名を変更する方法を知っています:

 for i in *; do
      screen_name=$(echo $i | grep --only-matching --extended-regexp '(Screen\ Shot)\ [0-9]+-[0-9]+-[0-9]+\ at\ [0-9]+\.[0-9]+.[0-9]+.[AP]M\.png');
      echo $screen_name;
 done

時間についてはよくわかりません。時間のすべてのチャンクで可能な2桁を想定するのが最も安全な場合があるため、1.14.29と01.15.29

ss.08-02-12-01.15.29-AM.png
ss.08-02-12-01.22.12-AM.png
ss.08-02-12-01.22.14-PM.png
ss.08-02-12-01.22.16-PM.png

最終目標は、実行時に上記のパスにあるすべてのファイルの名前をリストされた新しい形式に変更するbashスクリプトです。

助けてくれてありがとう。

4

2 に答える 2

2
for i in "Screen Shot"*.png; do
    new=`echo $i |awk '
        {
            split($3,a,"-")
            split($5,b,".")
            printf("ss.%s-%s-%s-%02d.%02d.%02d-%s",a[2],a[3],a[1],b[1],b[2],b[3],$6)
        }
    '`
    mv "$i" $new
done

前:

Screen Shot 2012-08-02 at 1.22.16 PM.png
Screen Shot 2012-09-02 at 13.42.06 PM.png

後:

ss.08-02-2012-01.22.16-PM.png
ss.09-02-2012-13.42.06-PM.png

編集:スティーブ によって提案されたように

printf("ss.%s-%s-%s-%02d.%02d.%02d-%s",a[2],a[3],substr(a[1]3,2),b[1],b[2],b[3],$6)

これは

ss.08-02-12-01.22.16-PM.png
ss.09-02-12-13.42.06-PM.png
于 2012-08-02T10:13:24.123 に答える
0

ストリームエディタsedを使用して、正規表現を使用して照合および置換できます。あなたはこのようなことをするでしょう

echo $i | sed "s/PATTERN/REPLACE/"

$iからファイル名を生成します。sedはstdinから読み取り、パターンを検索(sコマンド)してREPLACEに置き換えます。

REGEXPパターンでは、角かっこ()で囲むことで個別のグループをマークできます。ほとんどの場合、()でエスケープし、使用して置換パターンでこれらの部分にアクセスする必要があります。ここで、#は開始するサブグループの番号です。 1から。簡単な例を次に示します。

echo "ScreenShotXYZ.png" | sed "s/ScreenShot\(.*\)\.png/\1.png/"

ここで、XYZは角かっこで囲まれた式と一致し、置換文字列の\1を使用してアクセスできます。したがって、パターン全体がXYZ.pngに置き換えられます。

したがって、正規表現を使用して照合し、関連するブロックを角かっこで囲み、次のようにします。

ss.\1.\2.(and so on)

あなたの交換パターンのために。最初にsedを使用してダッシュをドットに置き換え、次に時間ブロック全体を1つのパターンにグループ化することでプロセスを最適化する方法はまだありますが、最初はそのようにコーディングする方が簡単です。

于 2012-08-02T09:44:34.237 に答える