假设我有三个文件(模板_ * .txt):

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

我想将它们复制到三个新文件(foo _ * .txt)。

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

有一些简单的方法可以用一个命令来做到这一点,例如

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

===============>>#1 票数:11 已采纳

for f in template_*.txt; do cp $f foo_${f#template_}; done

===============>>#2 票数: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

===============>>#3 票数:3

我的首选方式:

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

“I-not-remember-the-substitution-syntax”方式:

for i in x y z
do
  cp template_$i foo_$
done

===============>>#4 票数:2

这应该工作:

for file in template_*.txt ; do cp $file `echo $file | sed 's/template_\(.*\)/foo_\1/'` ; done

===============>>#5 票数: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

===============>>#6 票数:1

for i in template_*.txt; do cp -v "$i" "`echo $i | sed 's%^template_%foo_%'`"; done

如果您的文件名中包含时髦的字符,可能会中断。 当(如果)您确信它可靠地工作时,删除'-v'。

===============>>#7 票数:1

命令mmv (在DebianFink中可用或易于编译)是为此任务精确创建的。 使用简单的Bash解决方案,我总是要查找有关变量扩展的文档。 mmv使用mmv要简单得多,非常接近“非常棒”! ;-)

你的例子是:

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

mmv也可以处理更复杂的模式,并且它具有一些健全性检查,例如,它将确保目标集中的任何文件都不会出现在源集中(因此您不会意外地覆盖文件)。

===============>>#8 票数: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

显然,这些仅限于图像转换,但它们具有有趣的命令行界面。

  ask by Patrick McElhaney translate from so

未解决问题?本站智能推荐:

6回复

如何在bash中转换文本文件? (从foo.txt到bar.txt)

我试图通过bash使用foo.txt >> bar.txt将一个文本文件追加到另一个。 问题是,foo.txt是Windows文本文件(我认为),因为一旦附加在bar.txt中 因此,它们肯定是两种不同的文件类型。 我已经在Google上搜索了答案,但Google在搜
3回复

将文件名目录复制到.txt文件的脚本

这应该相当容易,并且我理解它的逻辑,但是我的shell脚本是初学者。 基本上,我有一个包含一百个左右文件的目录,并且我想将其文件名复制到.txt文件中。 每个文件名一行。 我知道我想要一个目录中所有文件的循环,将名称复制到文本文件,重复进行直到没有更多文件,但不确定如何在.sh文件中写
1回复

从* .txt搜索并将文件复制到新目录

我有一个* .txt文件,其中包含500多个文件行。 不包括路径,仅包括文件名。 我要指向服务器上具有子目录的服务器上的目录,在* .txt文件中搜索文件名,然后将找到的所有内容复制到新目录(此处无需子目录)。 很难找到任何可行的方法。 尝试过xargs和rsync --files-
1回复

Unix Bash-将文件从源文件夹递归复制到destination / * file_extension *(例如“ txt”)文件夹

这是我的代码,rec_copy()函数中的某些内容无法正常工作,可能是以下行: cp $ 1 / $ f $ HOME / $ 2 / $ dest 在文件夹中创建了名为文件夹的扩展名,但文件未复制到该文件夹​​中。 你能帮助我吗?
5回复

在BASH中复制时,如何获取编号为file1.txt_1,file1.txt_2,file.txt_3的重复文件?

在脚本中,我需要将文件从多个目录复制到一个目录中,例如: 有时,尽管有些文件具有相同的名称: 当两个具有相同名称的文件放在同一目录中时,如何将所有文件从不同目录复制到一个目录中而又不更改文件名? 样本结果:
4回复

AWS配置Bash One Liner

任何人都可以告诉我如何使用单线程自动化bash配置bash? 例: 应用程序:我想在Docker入口点内自动执行此操作!
2回复

Bash引用txt列表以在目录中查找数据并复制项目

我有一个文本文件,其中包含我们设计部门要求的7000行以上的字体名称。 该列表是由去除了所有文件扩展名的软件生成的。 某些文件确实没有扩展名。 该“ fontList.txt”需要通过脚本读取并引用一个文件夹,该文件夹中将包含许多子目录,其中包含数万个字体文件。 原始文件将在适当的地
5回复

使用bash将txt文件复制两次到另一个文件

我试图捕获一个file.txt并在整个内容中循环两次并将其复制到新文件file_new.txt。 我使用的bash命令如下: 上面的命令只是给我与file.txt相同的文件内容。 因此file_new.txt也具有相同的大小(1 GB)。 基本上,如果file.txt是1GB文
4回复

Bash脚本:按行编辑.txt

我有一个长度未知的文本文件。 每行有两个值: 现在,我必须使用另一个新列表获取另一个(或相同)文件: ...对于列表中的每一行,都有两个值。 我怎样才能做到这一点?
3回复

读取元素文件txt bash

我有一个标题为test.txt的文件文本,其中包含 我想逐行阅读,对于每一行我都希望提取元素。 我尝试过 它可以正确打印保存在txt文件中的矩阵的行,但是现在我不知道如何从可变行中提取单个元素... 我想做这样的事情