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

В SunOS у меня есть каталоги с именами, содержащими только непечатаемые символы. Команда

ls -ldb * 

возвращает следующее (некоторые пробелы удалены)

  • Чтение и запись ZFS отображаются в выводе vmstat -p
  • Как я могу перечислить все имена пользователей в Solaris 10?
  • Sed: Заменить N первых вхождений персонажа
  • bunzip2 в другой каталог
  • Bash для определения файла, измененного вчера, и проверьте, превышает ли его размер определенный порог
  • В чем разница между home $ и ~ $?
  •  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/ 

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

  • Выполнение команды по нескольким файлам в нескольких каталогах
  • libstdc ++. so.6: open failed: нет такого файла или каталога
  • lsof: нет записи pwd для UID
  • Как перенаправить вывод из команды find (использующей grep) в файл журнала?
  • FreeBSD не Unix. Но его Unix-подобный Unix. Где же тогда основной Unix читает исходный код?
  • unix - случайно переместил все под root в / old - Solaris 10
  • 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 - лучшая ОС в мире.