1

Linuxファイルサーバー(RedHat Enterprise)には、クライアントが動作する名前を変更する必要のあるフォルダーがいくつかあります。古いフォルダ形式(変更が必要なもの)はでしたclientcode_jobnumberjobname。新しい形式はclientcode_jobnumber_jobnameです。jobnumber基本的に、との間のフォルダ名に余分なアンダースコアを追加して、古いフォルダ名を変更する必要がありますjobname。また、新しい形式で表示するために作成されているすべての新しいフォルダー構造があるため、これらを変更する必要はありません。ジョブ番号は常に1文字の後に4つの数字が続きます。クライアントコードは、クライアントに応じて3〜4文字です。ジョブ名はジョブごとに異なります。フォルダーはすべて次の場所にありますclients/clientname/jobs/clientcode/"folder that needs to be renamed"(スクリプトが構造に深く入り込む必要がある例にすぎません)。それぞれに対してこれを行う必要がありますclientcode各クライアントの下。これを行うためのスクリプトをどのように設定しますか?どんな助けでも大いに評価されるでしょう。これらのフォルダには、名前を変更する必要があるものが何千もあります。

4

5 に答える 5

7

ファイル名に対して sed のように機能するコマンドがいくつかあります。試してみてください (または、 RHEL では見つからない可能性がある、別名 prename または rename.PLmmvの perl バリアント)。rename

おまけとして、どちらにも-nオプション (何もしない) があるため、何をしようとしているかを確認して、物を壊したり、情報を失ったりしないようにすることができます。

于 2010-01-12T18:15:10.410 に答える
0
find /path/clients -type d -name "*_?[0-9][0-9][0-9][0-9]*" | while IFS= read -r DIR
do
    dir=${DIR##*/}
    base=${DIR%/*}
    IFS="_"
    set -- $dir
    front=$1
    back=$2
    jobname=${back#?????}
    jobnum=${back%$jobname}
    newname="${front}_${jobnum}_${jobname}"
    echo mv "$DIR" "$base/$newname"
done
于 2010-01-12T23:56:41.737 に答える
0
for entry in * ; do
  if [ ! -d "$entry" ] ; then
    continue
  fi
  jobname="${entry##*_?????}"
  dirbase="${entry%$jobname}"
  if [ -z "$dirbase" -o -z "$jobname" ] ; then
    echo "Error with '$entry'"
    continue
  fi
  mv "$entry" "${dirbase}_$jobname"
done
于 2010-01-12T18:19:35.850 に答える
0

おそらくそれは私だけですが、ディレクトリ構造がどのように見えるかを正確に理解していません.コードタグ内の例を教えてください.

そして、おそらくこれはserverfault.comにあるはずです(ただし、#!/bin/shスクリプトはプログラミングとしてカウントされると思います)

追記:ヌーファル・イブラヒム、抵抗?それは、すべての POSIX 準拠バージョン、または Linux で機能する方法を使用することです。おそらく古いですが、私が持っている Solaris マシンには含まれていませrenamemmv。したがって、そのような解決策は不可能です。

于 2010-01-12T18:19:56.830 に答える
0

名前の形式は高度に構造化されており、すべてが単一の親の下にあると言われているため(直接または間接の子として..あなたが言及したことからはわかりません)、私はこれをお勧めします:

フォルダ名の正規表現を作成し、正規表現に対してターゲット フォルダ (名前を変更するフォルダがあるフォルダ) の内容の名前と一致する小さな perl スクリプトを記述します。一致したら、フォルダーの名前を新しい名前に変更します。Perl はこれらすべてを簡単にします。

このアプローチを追求することに決めた場合、念のため、Perl を知らず、どこから始めればよいか迷っている場合に備えて、途中で学習することに興味がある場合は、「Minimal Perl」という本を一読することをお勧めします。 ..巨大な言語を学習し、それを今必要なものに似たものに使用するための迅速で興味深い方法。

お役に立てれば。

于 2010-01-12T18:29:30.213 に答える