【问题标题】:How to move and number files?如何移动和编号文件?
【发布时间】:2013-03-06 17:28:57
【问题描述】:

我使用 linux,bash。

我有一个目录,里面有 100 个文件夹,每个文件夹的名称都不一样。

在这 100 个文件夹中,每个文件夹中都有一个名为 first.bars 的文件(所以我有 100 个名为 first.bars 的文件)。尽管都命名为 first.bars,但文件实际上略有不同。

我想将所有这些文件移动到一个新文件夹并重命名/编号这些文件,以便我知道哪个文件来自哪个文件夹。所以第一个 first.bars 文件必须重命名为 001.bars,第二个文件必须重命名为 002.bars.. 等等。

我尝试了以下方法:

ls -d * >> /home/directorywiththe100folders/list.txt
cat list.txt | while read line;
do cd $line;
mv first.bars /home/newfolder

这不起作用,因为我不能在一个文件夹中拥有 100 个名称相同的文件。所以我只需要知道如何重命名它们。重命名必须连接到 cat list.txt,因为第一行是包含第一个被移动和重命名的文件的文件夹。该文件将被称为 001.bars。

【问题讨论】:

    标签: linux bash while-loop move cat


    【解决方案1】:

    如果rename 命令不可用,

    for d in /home/directorywiththe100folders/*/; do
        newfile=$(printf "/home/newfolder/%d.bars" $(( c++ )) )
        mv "$d/first.bars" "$newfile"
    done
    

    【讨论】:

      【解决方案2】:

      尝试这样做:

      $ rename 's/^.*?\./sprintf("%03d.", $c++)/e' *.bar
      

      如果您想了解有关此命令的更多信息,请参阅我之前给出的最新回复:How do I rename multiple files beginning with a Unix timestamp - imapsync issue

      【讨论】:

      • 我无法让它工作。我首先尝试将它合并到我自己的代码中,但这不起作用。然后我在一个文件夹(其中 100 个文件夹中的一个)中尝试了它,并尝试使用您的代码重命名 first.bar 文件。不幸的是,什么也没有发生。 Rename 要求我提供 3 个输入:from、to 和 file。 *.bar 显然是文件,但我认为他不认识 from 和 to。
      • @rubano :我猜想你没有阅读我的链接!尤其是 note 部分。
      • 我实际上阅读了您的链接,但它没有帮助(起初)。但我最终确实让它工作了。非常感谢斯普特尼克!
      猜你喜欢
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 2018-11-05
      相关资源
      最近更新 更多