我尝试制作一个 bash 脚本来帮助我从文件夹中移动特定的子文件夹。
问题是,在主文件夹中,photos
我有这样命名的文件夹:
1
、2
、3
、4
、5
、6
、7
、8
、9
,0
其中文件夹的名称重复,然后再次重复相同的文件夹结构。我要移动的子文件夹位于名称中包含一个字符的最后一个文件夹中。我要移动的子文件夹的名称中包含 2 个或更多字符。文件夹结构为0-9
// 0-9
/ 0-9
subdir 未指定目标文件夹,所以假设是desktop/photos1
。
例子:photos/0/0/0/23345
photos/1/9/0/12578
如果两个子目录具有相同的名称,例如photos/0/0/0/23345
,photos/1/1/1/23345
我想重命名其中之一。我在 OSX 上
答案1
在带有 GNU coreutils 的系统上(因此不是 OSX 的默认安装),您可以使用
mv -f --backup=numbered -t /path/to/target photos/*/*/*/*/
这会动全部下深度 4 的子目录
photos/
,无论深度 1、2 和 3 的目录名称是什么。这种方法的优点是:仅在需要时才进行重命名(如果您只有一个
12578
子文件夹,例如 inphotos/1/9/0/
,则不会重命名)。如果没有 GNU coreutils,您可以使用这个(有点复杂)脚本,它将重命名所有子文件夹。例如
photos/1/9/0/12578
将被重命名12578-190
:target=/some/path for i in {0..9}; do for j in {0..9}; do for k in {0..9}; do for dir in "photos/$i/$j/$k/*/"; do mv -- "$dir" "$target/$(basename $dir)-$i$j$k" done done done done