連続ファイルのコピー

連続ファイルのコピー

、などという名前の12個のファイルがありますdmp_000。番号付きファイルの一貫性を維持するために、そのファイルをすべてなどにコピーしたいと思います。一人でなくても簡単にできる方法がありますか?dmp_001dmp_011rdmp_000rdmp_001

答え1

このコマンドを使用して、いくつかのサンプルデータを生成します。

% for  i in `seq 0 11`;do touch dmp_$(printf "%03d" $i);done

% ls
dmp_000  dmp_001  dmp_002  dmp_003  dmp_004  dmp_005  dmp_006  dmp_007  dmp_008  dmp_009  dmp_010  dmp_011

ファイルをコピーして元のファイルの変更/作成日を保持するには:

% for i in dmp*;do cp -p "$i" "r${i}";done

% ls
dmp_000  dmp_002  dmp_004  dmp_006  dmp_008  dmp_010  rdmp_000  rdmp_002  rdmp_004  rdmp_006  rdmp_008  rdmp_010
dmp_001  dmp_003  dmp_005  dmp_007  dmp_009  dmp_011  rdmp_001  rdmp_003  rdmp_005  rdmp_007  rdmp_009  rdmp_011

ファイルwdmp *をrdmp *に移動

% for i in wdmp*;do newname=$(echo $i|sed 's/^w/r/'); mv "$i" "$newname";done

ノートa:また使用することができます@warl0ckからの返信これを行うには、次のrenameコマンドを使用します。

答え2

使用がzsh許可されている場合:

autoload -U zmv            # load zmv
zmv -C 'dmp_(*)' 'rdmp_$1' # rename files

またはこの場合は、単に次のようになります。

zmv -C 'dmp_*' 'r$f'

$1$2対応する(...)グループ、および$fフルファイルパスに展開されます。)

バラよりこのリンクより多くの例を学びましょう。

答え3

Posix互換性があり、短く拡張したい場合は、すべてのファイルを位置引数1〜12(括弧内)で参照できます。

% ( set -- wdmp0[0-1][0-9] ;\
> for f ; do cp $f r${f#?} ; done )

答え4

コマンドの名前を変更してdmp_

rename dmp rdmp dmp_*

ファイルを保存するには、次の回避策を試してください。

for x in dmp_*; do cp $x r$x; done

関連情報