我试图将数百个实例的子目录从一个父目录移动到另一个父目录,同时在移动过程中更改子目录的名称。我的目录是一组数字:
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
在这里没有用,因为您没有递归地遍历子目录。