我有这个文件夹结构:
├── foo1
│ ├── bar1.txt
│ └── bar2.txt
├── foo2
│ ├── bar3.txt
│ └── bar4 with a space.txt
└── foo3
└── qux1
├── bar5.txt
└── bar6.txt
我想在每个文件夹级别之间加一个下划线:
├── foo1_bar1.txt
├── foo1_bar2.txt
├── foo2_bar3.txt
├── foo2_bar4 with a space.txt
├── foo3_qux1.bar6.txt
└── foo3_qux1_bar5.txt
我四处张望,没有找到任何可行的解决方案,主要是因为我的问题有两个特点:根目录中可能存在多个文件夹级别,而且某些文件中可能包含空格。
知道如何在bash中完成此操作吗?谢谢!
编辑:运行格伦杰克曼建议答案我得到这个:
一级文件夹有两个下划线。任何想法如何避免这种情况或只是对其重命名,以便仅是一个下划线?谢谢。
find */ -type f -exec bash -c 'file=${1#./}; echo mv "$file" "${file//\//_}"' _ '{}' \;
echo
如果满意,请删除。不必担心echo'ed命令不会显示引号,该脚本将正确处理带有空格的文件。
如果要删除现在空的子目录:
find */ -depth -type d -exec echo rmdir '{}' \;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句