【问题标题】:Remove file's substring to index in terminal删除文件的子字符串以在终端中索引
【发布时间】:2013-07-18 15:54:43
【问题描述】:

我有一个文件列表。他们遵循这种模式:_000n_NAME.PNG(文件编号为 n)

在终端(Linux 或 Mac OS)中,是否可以在单个命令中删除我所有文件的“000n”?

【问题讨论】:

  • 是否也要删除下划线?这些文件是在同一个目录中还是分散在多个(子)目录中?

标签: bash file shell terminal rename


【解决方案1】:

Sed 可以胜任:

sed 's/^_[0-9]*\(_.*\)$/_\1/'

如果您还想去掉下划线(数字前后):

sed 's/^_[0-9]*_\(.*\)$/\1/'

完整脚本:

while read f; do
    mv "$f" $(echo "$f"|sed 's#^.*_[0-9]*_\(.*\)$#\1#')
done < <(find . -name "_0*_NAME.PNG")

【讨论】:

  • @Kent:我当然会补充。
  • 我试过rename 's/000\([0-9]\)/\1/' _000*,但它不起作用。
  • @fedorqui:这不是我建议的 sed。
  • 是的,@anubhava,我只是在评论说我尝试了 sed 表达式并工作,然后移至 rename 并没有工作。
  • 好的,我发布了完整的重命名脚本。 (在 OSX 上没有重命名)
【解决方案2】:

你可以使用它:

  find . -iname '_000n*.png' | sed -e 's/\(_000n_\(.*.png\)\)/\1 \2/g' | xargs -n 2 mv
  • find : 将列出当前文件夹中所有名为 _000n*.png 的文件,从而满足您的需要
  • sed : 将提取正确的部分并显示原始 + 新名称
  • xargs -n 2 : 将参数传递给按 2 分组的下一个命令
  • mv : 将重命名

使用_000n_toto1.png_000n_toto2.png 和文件夹中的其他文件进行测试

【讨论】:

  • 可以使用更简单的 sed sed -e 'p;s/_[0-9]*_//'sed -e 'p;s/_[0-9]*n_//' 但 +1 用于使用 xargs -n2 ;)
猜你喜欢
  • 1970-01-01
  • 2019-03-22
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
相关资源
最近更新 更多