名前が印刷できない文字のみで構成されるディレクトリの名前を変更する方法

名前が印刷できない文字のみで構成されるディレクトリの名前を変更する方法

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

関連情報