将带有序列的文件重命名为新序列[关闭]

Posted

技术标签:

【中文标题】将带有序列的文件重命名为新序列[关闭]【英文标题】:Rename files with sequence to new sequence [closed] 【发布时间】:2014-05-07 18:55:06 【问题描述】:

我在需要用 bash 脚本重命名的目录中有文件。 您可以在下面看到文件的旧名称以及新文件名必须是什么。

旧名 -> 新名 文件 71 -> 001 文件 72 -> 002 文件 73 -> 003 文件 74 -> 004 文件 75 -> 005 文件 76 -> 006 文件 77 -> 007 文件 78 -> 008 文件 79 -> 009 文件 80 -> 010

OLDNAME 和 NEWNAME 应该与示例中的完全相同,因此: 旧文件名 FILE73 必须变成新文件名 003,FILE74 必须是 004,FILE80 必须是 010

提前致谢!

【问题讨论】:

您到底想要什么?是否要将所有文件名重命名为001....so on 改了问题,希望现在更清楚了。 这里不是要求人们编写代码的地方。您尝试过什么,您面临的具体问题是什么? 您的编辑确实无助于解释问题所在。根据什么原则更改名称?如果只是更改确切的 OLDNAMES -> NEWNAMES 那么您为什么不接受Mark Setchell's answer?如果它以FILE71,72,73,74...SOMELARGENUMBER001,002,003,004...SOMELARGENUMBER 之类的排序顺序更改文件,那么您应该写下有问题的文件以及SOMELARGENUMBER 的大小。 【参考方案1】:

运行简单的for..loop 并完成

#!/bin/bash
files=$(find mypath -maxdepth 1 -type f | sort -u)
a=1
for i in $files; do
  new=$(printf "%03d" $a) 
  mv $i mypath/$new
  let a=a+1
done

【讨论】:

几乎可以工作 :-),而且文件名 FILE73 必须是 003 和 FILE77 必须是 007 等等。你的结果是随机的。 @user3472135 更新答案见。【参考方案2】:

这是@MarkSetchell 脚本的另一个变体

#!/bin/bash
while read orig new
do
    echo mv "$orig" "$new"
done <<EOF
FILE71 001
FILE72 002
FILE73 003
FILE74 004
FILE75 005
FILE76 006
FILE77 007
FILE78 008
FILE79 009
FILE80 010
EOF

或者你可以试试

join -o"1.2 2.2" \
    <(find . -maxdepth 1 -name FILE\* -print|cat -n) \
    <(seq -f "%03g" 1000|cat -n) |\
    xargs -n2 echo

您需要用另一个命令替换 echo - 这取决于您... ;)

【讨论】:

感谢您的示例。结果的问题是结果是这样的: ./FILE73 001 ./FILE71 002 ./FILE80 003 ./FILE72 004 虽然我需要: ./FILE73 003 ./FILE71 001 ./FILE80 010 ./FILE72 002【参考方案3】:

给你:

#!/bin/bash
mv FILE71 001
mv FILE72 002
mv FILE73 003
mv FILE74 004
mv FILE75 005
mv FILE76 006
mv FILE77 007
mv FILE78 008
mv FILE79 009
mv FILE80 010

【讨论】:

我不敢相信你免费做了这一切。惊人的。开源的力量! @JohnZwinck 我得到了一个大大的微笑作为我的奖励!笑是最好的良药:-) 这让我很开心,点个赞吧! :-) +1:这是 James Blunt 创作歌曲“You're beautiful”的灵感来源!!

以上是关于将带有序列的文件重命名为新序列[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 将 .TXT 文件重命名为 .OLD? [关闭]

解析唯一数据和重命名文件

Laravel Eloquent 序列化:如何重命名属性?

linux下怎么样重命名文件

如何将文件重命名为子目录

重命名为带波浪号的文件夹