9

3つのファイル(template _ *。txt)があるとします。

  • template_x.txt
  • template_y.txt
  • template_z.txt

それらを3つの新しいファイル(foo _ *。txt)にコピーしたいと思います。

  • foo_x.txt
  • foo_y.txt
  • foo_z.txt

1つのコマンドでそれを行う簡単な方法はありますか?

cp --enableAwesomeness template_*.txt foo_*.txt

4

8 に答える 8

11
template_*。txtのfの場合; do cp $ f foo _ $ {f#template_}; 終わり
于 2008-08-25T17:26:57.503 に答える
3
[01:22 PM] matt@Lunchbox:~/tmp/ba$
ls
template_x.txt  template_y.txt  template_z.txt

[01:22 PM] matt@Lunchbox:~/tmp/ba$
for i in template_*.txt ; do mv $i foo${i:8}; done

[01:22 PM] matt@Lunchbox:~/tmp/ba$
ls
foo_x.txt  foo_y.txt  foo_z.txt
于 2008-08-25T17:25:23.827 に答える
3

私の好みの方法:

for f in template_*.txt
do
  cp $f ${f/template/foo}
done

「置換構文を覚えていない」方法:

for i in x y z
do
  cp template_$i foo_$
done
于 2008-09-18T01:07:58.250 に答える
2

これは機能するはずです:

for file in template_*.txt ; do cp $file `echo $file | sed 's/template_\(.*\)/foo_\1/'` ; done
于 2008-08-25T17:24:13.457 に答える
1

私はbashやcpで何も知りませんが、(たとえば)perlスクリプトを使用してこの種のことを行う簡単な方法があります。

($op = shift) || die "Usage: rename perlexpr [filenames]\n";

for (@ARGV) {
    $was = $_;
    eval $op;
    die $@ if $@;
    rename($was,$_) unless $was eq $_;
}

それで:

rename s/template/foo/ *.txt
于 2008-08-25T17:21:13.150 に答える
1
for i in template_*.txt; do cp -v "$i" "`echo $i | sed 's%^template_%foo_%'`"; done

ファイル名にファンキーな文字が含まれていると、おそらく壊れます。確実に機能することが確信できる場合は、「-v」を削除します。

于 2008-08-25T17:21:35.990 に答える
1

このコマンドmmv( DebianまたはFinkで利用可能、または自分で簡単にコンパイルできる) は、まさにこのタスクのために作成されました。単純な Bash ソリューションでは、変数展開に関するドキュメントを常に調べる必要があります。しかしmmv、使い方ははるかに簡単で、「awesomeness」にかなり近いです!;-)

あなたの例は次のようになります。

mcp "template_*.txt" "foo_#1.txt"

mmvより複雑なパターンも処理でき、いくつかの健全性チェックがあります。たとえば、宛先セット内のファイルがソース セットに表示されないようにします (ファイルを誤って上書きすることはありません)。

于 2008-09-15T15:32:10.163 に答える
0

それを行うさらに別の方法:

$ ls template_*.txt | sed -e 's/^template\(.*\)$/cp template\1 foo\1/' | ksh -sx

私はいつも、イメージ フォーマットで期待どおりの処理を行うImageMagick変換プログラムに感銘を受けてきました。

$ convert rose.jpg rose.png

バッチ変換を可能にする姉妹プログラムがあります。

$ mogrify -format png *.jpg

明らかに、これらは画像変換に限定されていますが、興味深いコマンド ライン インターフェイスがあります。

于 2008-08-27T23:49:17.833 に答える