反转目录结构的最后两个子文件夹

反转目录结构的最后两个子文件夹

基本上,我请求一种 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

相关内容