所以我的 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