0

名前を変更する必要のあるファイルのフォルダーがあります。

単純な増分数値名前変更関数の代わりに、最初に命名規則を提供する必要があります。この命名規則は、フォルダー内のファイル名の整合性を確保するために増分されます。

私がファイルを持っていると言う:

wei12346.txt
wifr5678.txt
dkgj5678.txt

名前を変更する必要があります:

Eac-345-018.txt
Eac-345-019.txt
Eac-345-020.txt

スクリプトを実行するたびに、名前が異なる可能性があり、それに伴う数値の増分も異なる可能性があります。

Ebc-345-010.pdf
Ebc-345-011.pdf
Ebc-345-012.pdf

したがって、ユーザーに提供されたパラメーターを要求する必要があります。これは、インデックスを作成するファイルのリストにある前のファイル名として役立つ可能性があると考えていました。例:Eac-345-017.txt

インクリメントについて私が確信していないもう1つのことは、このプロセスがどのように実行されるかを知らないため、スクリプトが099から100または999から1000のインクリメントをどのように処理するかです。

これはperlの簡単なスクリプトだと言われていますが、作業中のWindowsマシンでcygwinを実行しており、スクリプトを実行するためにbashとWindowsシェルにのみアクセスできます。

プログラミングの経験はありますが、スクリプトはほとんどまったく新しいものです。

ありがとう、クレイグ

(私はすでにこのタイプのものに関する投稿がたくさんあることを理解していますが、簡潔な答えを提供しているようには見えないので、私の質問です)

4

2 に答える 2

0
#!/bin/bash

prefix="$1"
shift

base_n="$1"
shift

step="$1"
shift

n=$base_n

for file in "$@" ; do
    formatted_n=$(printf "%03d" $n)
    # re-use original file extension whilke we're at it.
    mv "$file" "${prefix}-${formatted_n}.${file##*.}"
    let n=n+$step
done

ファイルを保存し、次のように呼び出します。

bash fancy_rename.sh Ebc-345- 10 1 /path/to/files/*

注:あなたの例では、a.txtをaに「名前変更」しました.pdfが、上記では、拡張子は同じままであると推測しました。あなたが本当に拡張子を変更したいだけなら、それは些細な変更でしょう。実際にファイル形式を変換したい場合は、もう少し複雑になります。

また、増分数を。でフォーマットしたことにも注意してください%03d。これはあなたの数列が例えばであることを意味します

010
011
012
...
099
100
101
...
999
1000

これは、3つの場所にゼロが埋め込まれますが、数が多い場合は自動的にオーバーフローすることを意味します。一貫性(常に4桁)が必要な場合は、パディングをに変更する必要があります%04d

于 2011-08-11T10:33:53.547 に答える
0

OK、次のことができます。ユーザーに最初にプレフィックスを尋ね、次に開始シーケンス番号を尋ねることができます。次に、ビルトインのprintffrombashを使用して数字を正しくフォーマットできますが、すべてのシーケンスを保持するのに十分な数の幅を指定する必要がある場合があります。これにより、名前がより均一になるためです。readユーザー入力を読み取るために使用できます。

echo -n "Insert the prefix: "
read prefix
echo -n "Insert the sequence number: "
read sn

for i in * ; do
  fp=`printf %04d $sn`
  mv "$i" "$prefix-$fp.txt"
  sn=`expr $sn + 1`
done

注: 拡張子も抽出できます。それは問題ではないでしょう。また、ここでは、変数に計算されたシーケンス番号から 4 つの数字を選択しました$fp

于 2011-08-11T09:49:23.157 に答える