gpt4 book ai didi

regex - 使用正则表达式在 linux 中重命名文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:59 24 4
gpt4 key购买 nike

这实际上不是一个问题,我自己解决了这个问题。但我想在这里发布我的解决方案,以节省处于相同情况下的其他人的时间和精力。

所以我遇到了必须重命名很多 (+3000) 匹配特定模式的情况。在我的例子中,文件是 syncthing 的自动备份,因此文件将重命名为:

foo.bar -> foo~20150221-1330.bar

最佳答案

在通过论坛和手册页进行了大量搜索之后,我创建了以下单行代码,它使用 find、sedxargs 恢复了原始文件名>mv Linux 中的命令:

find . -type f  | sed -e 'p;s/\(.*\)~20[0-9]\{6\}-[0-9]\{6\}\(.*\)/\1\2/' | xargs -n2 -d'\n' mv

如果您愿意,可以用您自己的模式替换 sed 部分。该命令可以顺便处理空格(感谢 xargs 中的 -d'\n' 标志),但不能处理换行符。我希望你们中的一些人发现这个命令很有用。

好的,我将提供更多关于每个命令的作用的信息:

  • 查找:给出当前目录下的所有常规文件(不是目录)
  • sed:p 将打印来自标准输入的每一行,s/regex/regex/ 将打印相同的行,但取而代之。所以你得到每个文件后跟固定的文件名:

    ./foo/bar~20150221-172703.txt
    ./foo/bar.txt`
  • xargs:-n2 将采用两行并将它们作为参数发送到 mv,-d'\n' 将解决问题文件夹名称中的空格(分隔符设置为换行符而不是空格)

关于regex - 使用正则表达式在 linux 中重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28646125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com