基本上,我请求一种 unix 方式(bash、perl 等)来反转最后两个子文件夹,就像这个 Windows 问题一样: https://superuser.com/questions/221/how-can-i-invert-a-directory-struct 这是一个例子,目的是修改大量文件的路径。
i.e.
/dir1/dir2/dir3/dir4/myfile
to:
/dir1/dir2/dir4/dir3/myfile
答案1
对于具有四个子目录的解决方案,您可以使用如下内容:
for p4 in */*/*/*
do
p3="${p4%/*}" p2="${p3%/*}" d4="${p4/*\/}" d3="${p3/*\/}"
mv "$p4" "$p3/$d3" && mv "$p3" "$p2/$d4"
done
在尝试转置之前,它不会对目标目录是否存在进行错误检查。在这种情况下,您最终将得到重复的第三级目录。例如,a/b/d
存在并且我们要转置a/b/c/d
,我们最终会得到a/b/d/c/c
。
如果您有太多匹配的目录,*/*/*/*
您可以通过每个级别的附加循环进一步拆分它。小心这将消除导出路径$p2
和 的需要$p3
。