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);
}
엮다
따옴표 와 이중 백슬래시 바꾸기 Old
및 New
사용\"
\\
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