GNU Parallel 使用参数输出隐藏目录,如下所示--results
。
我在 Ubuntu 上使用什么命令来更改所有目录,以便它们不再隐藏。这些目录称为:
'.\_ValidateAll.sh GL 170'/
'.\_ValidateAll.sh GL 190'/
'.\_ValidateAll.sh GL 220'/
'.\_ValidateAll.sh GL 355'/
'.\_ValidateAll.sh GL 357'/
'.\_ValidateAll.sh GL 359'/
'.\_ValidateAll.sh GL 361'/
'.\_ValidateAll.sh GL 363'/
实际上,当我在目录上执行 cat 操作时,我没有看到单引号
vmdovs@ubuntu:/mnt/out/1$ cat
GL170/ .\_ValidateAll.sh GL 357/ .\_ValidateAll.sh GL 390/ .\_ValidateAll.sh GL 470/ .\_ValidateAll.sh GL 570/
rename.sh .\_ValidateAll.sh GL 359/ .\_ValidateAll.sh GL 400/ .\_ValidateAll.sh GL 480/ .\_ValidateAll.sh GL 572/
.\_ValidateAll.sh GL 190/ .\_ValidateAll.sh GL 361/ .\_ValidateAll.sh GL 410/ .\_ValidateAll.sh GL 500/ .\_ValidateAll.sh GL 574/
.\_ValidateAll.sh GL 220/ .\_ValidateAll.sh GL 363/ .\_ValidateAll.sh GL 420/ .\_ValidateAll.sh GL 530/ .\_ValidateAll.sh GL 590/
.\_ValidateAll.sh GL 355/ .\_ValidateAll.sh GL 368/ .\_ValidateAll.sh GL 440/ .\_ValidateAll.sh GL 540/ .\_ValidateAll.sh GL 710/
也可以 cd 访问该目录,如下
cd .\\_ValidateAll.sh\ GL\ 190/
答案1
如果唯一的问题是目录被隐藏,您只需删除.
其名称开头的 即可使它们取消隐藏。例如,使用 perl-rename(rename
在 Ubuntu 上调用):
rename 's/^\.//' '.\_Validate'*
或者,仅使用 shell 工具:
for dir in '.\_Validate'*; do echo mv "$dir" "${dir//.}"; done
然而,这些机器人给你留下了可怕的目录名称,其中有空格、斜杠和其他令人讨厌的东西。既然你要重命名,你也可以重命名为正常的名称:
rename 's/^\.\\//; s/\s+/_/g' '.\_Validate'*
这将导致:
$ ls -d _*
_ValidateAll.sh_GL_100 _ValidateAll.sh_GL_107 _ValidateAll.sh_GL_114
_ValidateAll.sh_GL_101 _ValidateAll.sh_GL_108 _ValidateAll.sh_GL_115
_ValidateAll.sh_GL_102 _ValidateAll.sh_GL_109 _ValidateAll.sh_GL_116
_ValidateAll.sh_GL_103 _ValidateAll.sh_GL_110 _ValidateAll.sh_GL_117
_ValidateAll.sh_GL_104 _ValidateAll.sh_GL_111 _ValidateAll.sh_GL_118
_ValidateAll.sh_GL_105 _ValidateAll.sh_GL_112 _ValidateAll.sh_GL_119
_ValidateAll.sh_GL_106 _ValidateAll.sh_GL_113 _ValidateAll.sh_GL_120
重要提示:请注意,我没有检查文件名冲突。如果您将其中之一重命名为已存在的文件,那么您将覆盖现有文件。
答案2
您可以使用 GNU 并行:
parallel mv {} '{=s/^\.\\_//=}' ::: '.\_ValidateAll'*
这将从.\_
名称中删除。
也可以用 _ 替换空格,运行:
parallel mv {} '{=s/^\.\\_//; s/\s/_/g=}' ::: '.\_ValidateAll'*
答案3
原则上(您可能知道),如果文件和目录的名称以.
.因此,您可以通过删除该 来使它们再次“可见” .
。可以通过bash
使用内置的字符串操作函数来完成:
user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; mv "$dir" "$newname"; done
但是,建议您事先尝试一下以验证其是否正常工作
user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; echo "rename $dir to $newname"; done
更新:您绝对应该遵循@terdon 答案中的建议,利用这个机会并摆脱该过程中的所有特殊字符。