如何使用sed和csv重命名文件

DᴀʀᴛʜVᴀᴅᴇʀ

我是Linux的新手sedawk但是我不介意在新想法上挑战自己。话虽这么说,我了解目的和使用方法rename以及sed常见事件(例如,从所有文件中添加a$date_1234从中删除a)的目的。但是,我想弄清楚如何重命名100个与文件类型无关的文件。

重命名示例:

  • 旧名称alpha.ai重命名为omega.ai
  • 旧名称pie32.ai重命名为apple.ai
  • 旧名称xmas.ai重命名为santa.ai

我最初使用bash脚本将所有名称拉到.csv文件中,并将它们放在A列中。在BI列中用新名称编写。现在,由于没有发生任何常见事件,您sed如何编写或执行类似操作?

#!/bin/bash
for i in *.ai
do
        mv $i $(echo $i | sed "a1,b1")

done
彼得

如果碰巧有一个看起来像这样的文件:

old_name1, new_name1
old_name2, new_name2
old_name3, new_name3

您可以做一个肮脏的小把戏:

sed 's/^/mv -vi "/;s/, /" "/;s/$/";/' < names.csv | bash -

sed comamnds(用分号分隔)可以做到这一点(s用于替代,/用作分隔符,任何其他字符也可以使用,@也经常使用):

  • s/^/mv -vi "/-mv -vi "在每行的开头添加^是行的开头);
  • s/, /" "/-用逗号替换逗号,后跟一个空格" "
  • s/$/";/-在所有行的$末尾加上双引号(表示行尾)

因此,输出为sed

mv -vi "old_name1" "new_name1"
mv -vi "old_name2" "new_name2"
mv -vi "old_name3" "new_name3"

这将被馈送bash执行。文件名周围的引号不是强制性的,它们只是保护文件名中任何可能的空格(但是,它们绝对不会对逗号后的空格有所帮助,因为它被用作分隔符)。-v指令mv将显示正在执行的操作(以防万一出问题,您会知道发生了什么),-i将导致其询问是否覆盖现有文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章