【问题标题】:Rename files consecutively on two separate folders在两个单独的文件夹中连续重命名文件
【发布时间】:2014-02-05 14:24:13
【问题描述】:

我有两个文件夹,文件夹 A 有 50 个文件,文件夹 B 有 N 个文件,我需要做的是: 用一个通用计数器重命名两个文件夹中的所有文件,每次我从文件夹A重命名一个文件时,假设文件夹B中的1、3个文件将获得连续的计数器编号:2、3和4,然后返回文件夹A并重命名下一个5 的文件,直到文件夹 A 上没有文件为止。

文件夹A 1 5 9 13 17

文件夹B 2 3 4 6 7 8 10 11 12 14 15 16 18 19 20

有什么想法吗?

【问题讨论】:

  • 这需要一点编程。你知道任何编程语言吗?
  • 我不是程序员,但我在 C 和一些 Linux 脚本上编写了一些代码,但与管理不同文件夹中的文件无关。
  • 这个解决方案可以用几十种语言完成,所以如果你发布这样的问题,最好让人们知道你想使用哪种语言。这个网站的想法是帮助你学习,所以它应该使用你已经熟悉的技术。

标签: linux renaming


【解决方案1】:

我认为这段代码可以解决问题。它基于模数来增加文件夹 B 的数量,并且如果文件夹 B 中的文件数超过文件夹 A 文件数的 3 倍,则使用临时停止条件。

  • FolderA 的模式是 1、5、9... 这就像将 i 初始化为 1,每次迭代递增 4。
  • 如果 i 模 4 不为 0,则文件夹 B 的名称递增 1 否则它递增 2。

如果复制粘贴到文件中(比如说 renaming.sh)并假设有适当的执行权限($> chmod +x renaming.sh),它可以像从命令行那样使用:

$> ./renaming.sh folderA folderB

这是要放入文件的代码:

#!/bin/bash


i=1
ACOUNT=0
for FILEA in $1/*; do
        mv "${FILEA}" "$1/${i}"
        (( i+=4 ))
        ((ACOUNT++))
done

i=1
BCOUNT=0
for FILEB in $2/*; do
        if (( i%4 )) ; then
                ((i++))
        else
                ((i+=2))
        fi
        if ((BCOUNT>= 3* ACOUNT)); then break; fi
        ((BCOUNT++))

        mv "${FILEB}" "$2/${i}"
done

【讨论】:

  • 非常感谢先生,我试试看。
  • @darko 没问题。如果它解决了您的问题,请将您的问题标记为已解决:它使其他人更容易找到好的答案。如果没有,请告诉我,我们会尽力解决。
猜你喜欢
  • 2018-04-17
  • 2022-11-17
  • 2015-01-04
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多