将子目录移动到新的父目录,其中新目录名称增加 1

将子目录移动到新的父目录,其中新目录名称增加 1

我试图将数百个实例的子目录从一个父目录移动到另一个父目录,同时在移动过程中更改子目录的名称。我的目录是一组数字:

1000, 1001, 1002, 1003, ..., 1998, 1999

每个目录都有一个名为“old”的子文件夹(例如,1000/old),我想将其移动到下一个增量目录(并重命名子文件夹)。

例如,我想将“1000/旧”移动到“1001/新”。

我尝试过使用 xargs,这是我的新手,所以我不确定我是否朝着正确的方向前进。我想我想要的是这样的:

find 1* -name 'old' | xargs -i -t mv {} <dir+1>/new

我只是不确定如何实现递增(dir+1位)。

我还尝试对已接受的答案进行修改问题,但我的修改也无法正常工作(ls在实际开始移动/重命名目录之前我用来测试代码):

#!/bin/bash
for x in 1*; do
  ls -d "$x/old" "${x}$i/new"
  ((++i))
done

上述问题是下一个目录变为 10001、10002 等,而不是 1001、1002。

非常感谢任何建议。

答案1

Shell 将表示十进制整数的字符串视为整数。如果您有一个目录,其名称仅包含没有前导零的数字,则您有一个数字,您可以执行算术在上面。

for d in 1*; do
  mv "$d/old" "$((d+1))/new"
done

您可以使脚本更加健壮,仅在子目录实际存在时才执行移动old,并在必要时创建目标。

for d in 1*; do
  if [ -d "$d/old" ]; then
    mkdir -p "$((d+1))"
    mv "$d/old" "$((d+1))/new"
  fi
done

find在这里没有用,因为您没有递归地遍历子目录。

相关内容