我想打一个脚本来“取消隐藏”所有文件和目录某个目录内一气呵成,如./unhide test
。
test/
├── sub1
│ └── .hiddenfile1
└── sub2
└── .hiddendir
├── .hiddendirsub
├── .hiddenfile2
└── not.hidden
期望的结果:
test/
├── sub1
│ └── hiddenfile1
└── sub2
└── hiddendir
├── hiddendirsub
├── hiddenfile2
└── not.hidden
我怎样才能做到这一点?
我对此还很陌生,并且一直在尝试使用寻求解决方案find
,但由于-exec
和rename
或(或mv
)陷入了困境,因为我仍在努力理解这种组合的工作原理。:(所以,如果这里有人可以提供解决方案和详细说明,我将不胜感激。谢谢。
您可以find
按照以下步骤进行操作:
find /path/to/test -depth -name ".*" -execdir rename -n 's|/\.|/|' {} +
如果它显示您要删除的-n
选项,则仅打印重命名操作。
-depth
–让find
流程从下到上,在其父目录之前重命名文件-name ".*"
–允许find
搜索以点开头的文件(所有内容都是文件)–点在此处为文字,因为这不是正则表达式-execdir … +
–…
在匹配文件的目录中执行rename 's|/\.|/|' {}
–替换首次出现的“ /”。从匹配文件的路径(find
其占位符为{}
)中以“ /”开头,实际上是从文件名开头删除点。rename 's|/\.|/|' ./.hiddenfile1
在您的情况下,将其重命名为./hiddenfile1
。$ tree -a
.
├── sub1
│ └── .hiddenfile1
└── sub2
└── .hiddendir
├── .hiddendirsub
├── .hiddenfile2
└── not.hidden
$ find ~/test -depth -name ".*" -execdir rename 's|/\.|/|' {} +
$ tree -a
.
├── sub1
│ └── hiddenfile1
└── sub2
└── hiddendir
├── hiddendirsub
├── hiddenfile2
└── not.hidden
在脚本中,您可以简单地使用位置参数而不是路径,它可以是相对的也可以是绝对的–请记住正确引用:
#!/bin/bash
find "$1" -depth -name ".*" -execdir rename -n 's|/\.|/|' {} +
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句