Как я могу переименовать каталог с именем, состоящим только из непечатаемых символов

В 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/ 

Как я могу переименовать эти каталоги?

  • Не удается получить пользователя $ HOME поверх su на Solaris и AIX
  • Как увеличить загрузку / использование CPU в Solaris 10 для тестирования nagios?
  • Как удалить устройство из пула
  • perl + сочетание команды exec с perl одной линейной строкой
  • Перечислите прямые символические ссылки (ссылки, которые не указывают на другую символическую ссылку)
  • Почему в выводе netstat не отображается мой IP-адрес клиента?
  • Как увидеть свободное место на диске SunOS?
  • Какую ОС следует устанавливать на старых рабочих станциях Sun Blade 1000 / Sun Blade 2000 и как мне это сделать?
  • 3 Solutions collect form web for “Как я могу переименовать каталог с именем, состоящим только из непечатаемых символов”

    Аналогичный текст как ls -ldb * может быть произведен (ksh, bash, zsh) $'...' , так как это:

     echo $'\0122016\0122016' 

    Это всего лишь куча новых строк (октябрь 012, гекс 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 

    Код C / C ++

     #include<cstdio> int main(){ rename(Old,New); } 

    компилировать

    Reeplace Old and New с использованием котировок \" и двойной обратной косой черты \\

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

    Бег

    ./bin

    Неподтвержденный псевдокод:

     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 
    Linux и Unix - лучшая ОС в мире.