对于不同位置具有相似名称的一组目录,
/foldX/dirA
有子目录aa1 aa2 aa3 aa4 aa5
/foldZ/dirA
有子目录aa1 aa2 aa3
/foldY/dirA
有子目录aa1 aa2 aa3
将目录复制或移动aa*
到另一个文件夹的 有效方法是/foldNew/dirA
什么aa1, aa2, aa3, aa4, aa5, aa6, aa7, aa8, aa9, aa10
?
aa1
到aa4
从foldX
aa5
到aa7
从foldY
aa8
到aa10
从foldZ
答案1
以下脚本可以完成您想要的操作:
#!/bin/bash
counter=0
mkdir foldNew
for i in fold?/dirA/aa*; do
counter=$((counter + 1))
mv $i foldNew/aa$counter
done
它会记录已移动的文件夹数量,并使用 Bash 的通配符系统迭代您要移动的所有文件夹。
我使用您描述的设置对其进行了测试,它执行了您想要的操作,唯一的例外是将它们移动到 aa1 到 aa11,因为 dirA 有五个子目录,而不是四个。
该脚本将 aa20 移动到 aa3 之前。如果子目录的顺序确实很重要,您可以尝试以下代码:
#!/bin/bash
counter=0
mkdir foldNew
for i in $(echo fold?/dirA/aa* | sort -V); do
counter=$((counter + 1))
mv $i foldNew/aa$counter
done
然而,我认为它不能很好地处理文件名中的空格和换行符,所以使用它时要小心。