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 的回答中的建議,利用這個機會並擺脫過程中的所有特殊字元。