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