重命名并将相似的命名目录集复制/移动到另一个位置

重命名并将相似的命名目录集复制/移动到另一个位置

对于不同位置具有相似名称的一组目录,

/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

aa1aa4foldX

aa5aa7foldY

aa8aa10foldZ

答案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

然而,我认为它不能很好地处理文件名中的空格和换行符,所以使用它时要小心。

相关内容