이름이 인쇄할 수 없는 문자로만 구성된 디렉터리의 이름을 바꾸는 방법

이름이 인쇄할 수 없는 문자로만 구성된 디렉터리의 이름을 바꾸는 방법

SunOS에는 이름에 인쇄할 수 없는 문자만 포함된 일부 디렉토리가 있습니다. 주문하다

ls -ldb *

다음을 반환합니다 (일부 공백이 제거됨)

drwxr-xr-x 3 user1 group1 3 Feb 4 18:10 \0122011\0122016\0122016\0122016\0122011\0122011\0122011\0122011\0122011\0122011\0122016\0122011\0122012/
drwxr-xr-x 3 user1 group1 3 Feb 4 11:03 \0122016\0122016/

이 디렉토리의 이름을 어떻게 바꿀 수 있습니까?

답변1

ls -ldb *(ksh, bash, zsh)는 $'...'다음과 같이 유사한 텍스트를 생성할 수 있습니다.

echo $'\0122016\0122016'

그것은 단지 많은 줄 바꿈(Oct 012, Hex 0x0A)과 연도일 뿐입니다.

사용할 수 있는 셸이 제한되어 있으면 printf를 사용하세요.

printf '\0122016\0122016'

위의 코드에는 마지막 코드가 포함되어 있지 않습니다 /. 실제로는 커널에 디렉토리 이름을 제공할 필요가 없습니다.

따라서 지우려면 다음을 사용하십시오.

rmdir "$(printf '\0122016\0122016')"

사용 이름을 바꾸려면 다음을 수행하십시오.

mv "$(printf '\0122016\0122016')" newname

다른 파일에는 다음이 필요합니다.

mv "$(printf '\0122011\0122016\0122016\0122016\0122011\0122011\0122011\0122011\0122011\0122011\0122016\0122011\0122012')" newname

아니면 만약 있다면아니요이름이 비슷하고 문자열이 더 짧은 다른 파일:

mv "$(printf '\0122011\0122016\0122016\0122016')"* newname

답변2

C/C++ 코드

#include<cstdio>

int main(){
 rename(Old,New);
}

엮다

따옴표 와 이중 백슬래시 바꾸기 OldNew사용\"\\

g++ -O3 -o bin file.cpp -D Old=\"\\0122016\\0122016/\" -D New=\"new\"

달리기

./bin

답변3

테스트되지 않은 의사코드:

i=1
for d in *
do
  echo "$d"
  echo Enter Y to rename the above directory:
  read answer
  if [ $answer = "Y" ]
  then
    mv "$d" tempdir${i}
    i=$((i+1))
  fi
done

관련 정보