Move命令将子文件夹中的所有文件转移到父目录,如果存在同名文件则重命名

Move命令将子文件夹中的所有文件转移到父目录,如果存在同名文件则重命名

所以我的 Ubuntu 机器上有一个目录,其中有 77 个子文件夹,每个子文件夹中都有不同数量的 torrent 文件。子文件夹中总共包含 427 个种子。我想将它们全部从子文件夹移动到父目录中。

收获是什么?有些文件的名称完全相同。移动后,它们重命名为什么并不重要,但修复它的最简单方法是 abc.torrent ---> abc1.torrent、abc2.torrent,依此类推(如果有更多)。

我发现以下代码将所有文件提取到父目录:

find . -mindepth 2 -type f -print -exec mv {} . \;

我知道我可以使用 --backup 来修复同名的文件。所以我将其添加到代码中:

find . -mindepth 2 -type f -print -exec mv --backup=numbered {} . \;

但当我运行它时,我最终只移动了 167 个文件,而不是 427 个。

我也知道我可以使用 -i 单独询问我每个问题,但这需要相当长的时间。有没有办法自动化这个?

答案1

据我的理解,你的第二个发现应该有效 - 如果你将这个发现通过管道传输,wc -l它会按预期返回 427 吗?

这是一个快速的 bash 脚本,应该可以执行相同的操作:

#!/bin/bash

for torrent in $(find /path/to/target/dir -mindepth 2 -type f); do
    count=0
    # get filename and remove any spaces
    filename=$(echo $torrent | tr -d ' ' | awk -F '/' '{print $NF}')
    # if it exists in the current dir, name it $count-$filename
    while [ -f /path/to/target/dir/$filename ]; do
        ((count++))
        filename=$count-$filename
    done
    # do the move
    mv "$torrent" /path/to/target/dir/$filename
done

相关内容