【问题标题】:single repeating command with input and output files带有输入和输出文件的单个重复命令
【发布时间】:2014-08-30 14:52:18
【问题描述】:

我一直在尝试学习如何使用命令行充分地多次执行单个命令。虽然我已经学会了如何在没有输入和输出文件的情况下执行单个命令,但是当需要这些文件时它会变得更加复杂。

cp 命令需要这个,所以让我们以此为例。我查找所有带有 .png 扩展名的图像并复制它们。我用google后想出的办法是:

find -regex ".*\.\(png\)" -exec cp {} {}3 \;

唯一的问题是我必须在名称后使用任何数字重命名文件,因此它被重命名为 file.png3 而不是 file.png。我不知道该怎么做,因为我无法将新数字放在名称之前,因为它似乎不起作用。

有没有更好的方法来做到这一点,还是我完全错误的方式?

【问题讨论】:

  • 你需要更清楚你想要做什么,然后我们可以给你一些建议。如果要将操作应用于文件列表,for 循环可能就足够了,例如for f in *.png; do echo $(basename "$f" .png); done

标签: regex linux bash command-line


【解决方案1】:

我不确定您如何在单个 find 命令中执行此操作,但您可以将其拆分。首先,使用 find 查找文件。然后使用 sed 删除 .png 扩展名。最后,使用 xargs 对每个文件运行复制功能。像这样:

find -regex ".*\.\(png\)" | sed -r 's/.png//g' | xargs -I {} cp {}.png {}_copy.png

如果你不知道,管道“|”将一个程序的输出发送到下一个程序。

或者,您可以只修改文件名的开头(因此 3img.png 而不是 img.png3)或复制到新文件夹。

【讨论】:

  • 非常好+1。没关系
  • 这完全按照我的要求执行了操作。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2012-11-15
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
相关资源
最近更新 更多