ファイル名を変更しながらファイルをコピー・移動する
ソースマスクとターゲットマスクを指定することで、ファイル名を変更しながらコピーや移動を行うことができます。
ソースマスクとターゲットマスク
ソースマスクはコピー・移動するファイルのフィルタリング及び、ターゲットマスクのフォーマットに影響します。
また、「Using shell patterns」オプションの影響も受けます。
ターゲットマスクは、コピー・移動先のパス及びファイル名の指定を行います。
ターゲットマスクを省略した場合は、ファイル名の変更は行われません。
ソースマスク
「Using shell patterns」がオンの場合で説明します。「Using shell patterns」がオフの場合は正規表現になりますが、考え方は似たようなものです。
「Using shell patterns」がオンの場合、利用できるパターン文字は「*」と「?」になります。
意味は説明済みですので省略します。
注意:
「?」を利用した時の挙動がシェルパターンに従っていないようです。
積極的に使わないほうがいいかも。 ファイル名のパターンに従ってソースマスクを決定します。
例えば「a.txt」、「b.test.txt」、「c.doc」ファイルが存在し、
ターゲットマスクを指定しない場合・・・
ソースマスク:a.txt
「a.txt」が対象になる。ソースマスク:*
すべてのファイルが対象になる。ソースマスク:*.txt
「a.txt」、「b.test.txt」が対象になる。ソースマスク:*.*.txt
「b.test.txt」が対象になる。ソースマスク:*.*.txt
「b.test.txt」が対象になる。ソースマスク:?.txt
「a.txt」、「b.test.txt」が対象になる。「b.test.txt」は「t.txt」と名称が変更されコピー・移動される。
「?」は任意の1文字が対象になるので「b.test.txt」が対象になるのはおかしいような?
「find ?.txt」コマンドやMidnight Commanderからファイルを検索すると、
「b.test.txt」は該当しません。
以下のようにソースマスクを指定してコピーすると・・・
なぜか「b.test.txt」が「t.txt」と名称が変更されコピーされる。
で、同じパターンで検索すると・・・
「b.test.txt」は列挙されません。
仕様ですかね?
ターゲットマスク
「Using shell patterns」がオンの場合で説明します。「Using shell patterns」がオフの場合は正規表現になりますが、考え方は似たようなものです。
ターゲットマスクで利用できるワイルドカードは、「*」と「\数値」(\はバックスラッシュ)です。
ソースマスクの「*」と「\数値」(\はバックスラッシュ)が対応します。
「\数値」の数値は0〜9まで指定できます。
例えばソースマスク「*.*」に対応する数値は、「\1.\2」になります。
「\0」は特別で、ファイル名全体を表します。
ソースマスクとターゲットマスクの組み合わせ例
以下の例は、「Using shell patterns」がオンになっています。また、例に出てくる「\」はバックスラッシュです。
例1)単純なリネーム
対象ファイル:a.txtソースマスク:*
ターゲットマスク:b.doc
コピーされたファイルの名前:b.doc
例2)ファイル名(拡張子除く)を変更する
対象ファイル:a.txtソースマスク:*.*
ターゲットマスク:b.\2
コピーされたファイルの名前:b.txt
例3)拡張子を変更する
対象ファイル:a.txtソースマスク:*.*
ターゲットマスク:*.doc
コピーされたファイルの名前:b.txt
例4)ファイル名(拡張子除く)にプレフィックスを追加する
ファイル名の頭に「Document_」を追加します。対象ファイル:a.txt
ソースマスク:*.*
ターゲットマスク:Document_*.*
コピーされたファイルの名前:Document_a.txt
例5)ファイル名と拡張子を入れ替える
ソースマスク「*.*」とそれに対応した「\数値」の組み合わせが分かると思います。対象ファイル:a.txt
ソースマスク:*.*
ターゲットマスク:\2.\1
コピーされたファイルの名前:txt.a