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'/
실제로 디렉토리에 고양이를 입력할 때 작은따옴표가 표시되지 않습니다.
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'*
또는 셸 도구만 사용하면 됩니다.
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'*
.\_
이름에서 제거됩니다 .
공백을 _ run으로 바꾸려면 다음을 수행하십시오.
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의 답변에 있는 조언을 반드시 따라야 합니다.