Как я удаляю возвраты каретки из имен каталогов?

Это не вывод программы, это - некоторая полезная информация об оболочке.

Так или иначе это может быть hided при помощи подоболочки и перенаправления вывода

( sleep 3 & ) > /dev/null 2>&1
5
10.01.2013, 00:36
3 ответа

ОТРЕДАКТИРОВАННЫЙ: забыл удваиваться, выходят из \r в sed строка

любой из них должен работать на Вас

for i in $(find . -type d -name '*\r'); do mv "$i" "$(echo $i | sed -e 's/\\r//g')"; done

find . -type d -name '*\r' -exec mv "{}" "$(echo {} | sed -e 's/\\r//g')" \;

это найдет все каталоги названными * $\\r под Вашим в настоящее время каталог

это будет затем mv(переименуйте) их к тому же имени минус \r

2
27.01.2020, 20:37
  • 1
    Это работало, кроме я изменил '*\r' на * $ '\r'. Спасибо за справку. Я не знаю кто вниз проголосовавший этот ответ - позор им :) Кроме того, я использовал вторую команду, которую Вы перечислили. –  John C 09.01.2013, 20:44
  • 2
    @FathomSavvy да, не уверенный, как за рабочий ответ вниз проголосовали... довольный помочь все же. –  h3rrmiller 09.01.2013, 20:45
  • 3
    +1 для рабочего решения. downvote, вероятно, от бригады пуриста удара для парсинга вывода замены команды, это считают ловушкой (mywiki.wooledge.org/BashPitfalls#for_i_in_.24.28ls_.2A.mp3.29). Предпочтительный вариант состоит в том, чтобы использовать комбинацию чтения и найти с разделителями байта NUL, посмотрите mywiki.wooledge.org/BashFAQ/020 –  iruvar 09.01.2013, 20:57
  • 4
    @ChandraRavoori, который имеет смысл, спасибо за подсказку. Я отредактировал и добавил кавычки –  h3rrmiller 09.01.2013, 21:59

Linux rename команда делает это легким:

rename $'\r' '' *

Это заменяет первый и единственный возврат каретки ($'\r') пустой строкой ('') во всех именах файлов в текущем каталоге. Имена, которые не содержат возврат каретки, оставлены без изменений (или можно записать rename $'\r' '' *$'\r' только рассматривать файлы, которые должны быть переименованы).

Если необходимо действовать на файлы в подкаталогах также:

shopt -s globstar
rename $'\r' '' **/*$'\r'

(Пользователи Debian, Ubuntu и производных: изменение rename кому: rename.ul, или изменение rename $'\r' '' кому: rename 's/\r//'.)

Альтернатива, с помощью zsh's zmv функция:

zmv $'**/*\r' "${f%?}"
5
27.01.2020, 20:37

попробуйте это find . -type d -name *$'\r' -exec rm -rf '{}' \;

0
27.01.2020, 20:37
  • 1
    , который удалит сам файл не '\r' от имени каталога –  h3rrmiller 09.01.2013, 20:16
  • 2
    неправильно понял это, я пытаюсь удалить их использующий этот –  harish.venkat 09.01.2013, 20:45
  • 3
    команды, я попробовал эту команду. Это отключило первые 6 букв имени каталога. Я получил ошибку "Никакой такой файл или каталог xxx". –  John C 09.01.2013, 20:50
  • 4
    На самом деле я думаю, что это была комбинация Вашего решения и h3rmiller, который заставил его работать. –  John C 09.01.2013, 21:19

Теги

Похожие вопросы