GNU Parallel에서 생성된 모든 숨겨진 디렉터리의 이름을 바꿉니다.

GNU Parallel에서 생성된 모든 숨겨진 디렉터리의 이름을 바꿉니다.

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을 사용하면( renameUbuntu에서 호출됨):

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'*

.\_이름에서 삭제됩니다 .

공백을 _로 바꾸고 다음을 실행할 수도 있습니다.

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의 답변에 있는 조언을 반드시 따르고 이 기회를 활용하고 프로세스에서 모든 특수 문자를 제거해야 합니다.

관련 정보