Как я исправляю каталог, неправильно скопированный в себя?

Это была ошибка в версиях GNU Grep ранее, чем эта фиксация (т.е. ранее, чем GNU версия 2.5.3).

Заключение в кавычки соответствующей части журнала изменений:

Previously failing tests relative to left anchors (^ and \<) and -w should now pass.

Начальная фиксация, которая описала ошибку также, добавила тест для нее:

# End of a previous match should not match a "start of ..." expression.
grep_test "word_word/" "word_/" "^word_*" -o

3
13.04.2017, 15:13
2 ответа

Во-первых, выгоните новый каталог с квартиры (с временным именем, чтобы избежать конфликта), затем удалить исходный каталог, затем переименовать новый каталог в место.Примечание: потому что это включит вещи удаления в массе, продумать его тщательно прежде просто выполнить эти команды и удостовериться, что у Вас есть резервное копирование сначала. Кроме того, я записал это с &&s между командами, поэтому если Вы перестали работать, остальные не будут работать - хороший в сценарии, но если Вы делаете это вручную, вероятно, лучше просто ввести их последовательно, обратить внимание и остановку, если что-нибудь идет не так, как надо.

mv <path>/mydir/mydir <path>/mydir-temp &&
rm -R <path>/mydir &&
mv <path>/mydir-temp <path>/mydir
1
27.01.2020, 21:32
  • 1
    я смущен рекурсивным, удаляет команду здесь - если бы каталог перемещен, почему это должно было бы быть удалено? –  Peter Boughton 15.12.2010, 21:18
  • 2
    Кроме того, я попробовал вариант этого, и доберитесь, та же проблема - посмотрите последнее редактирование к вопросу. –  Peter Boughton 15.12.2010, 21:22
  • 3
    Ой, у меня был путь в rm команда неправильно; я отредактировал ответ для исправления его. А-ч –  Gordon Davisson 15.12.2010, 21:49
  • 4
    , я вижу то, что Вы делаете теперь. Это однако означало бы что любые файлы в <path>/mydir это не находится в <path>/mydir/mydir был бы потерян. Я иногда предполагаю, что это полезно, но не в этом случае. –  Peter Boughton 15.12.2010, 21:59
  • 5
    Вы пытаетесь объединить два mydir каталога? Я не думаю mv команда может сделать это... –  Gordon Davisson 15.12.2010, 22:21

Лучший способ сделать это:

for d in `ls -A`; do if [ "$d" != "TTT" ]; then cp -Rf $d TTT; fi; done

копии все каталоги из текущего каталога рекурсивно в каталоге TTT кроме самого TTT. Опция -A в ls позволяет Вам рассматривать все скрытые каталоги и файлы, но не рассматривают специальные файлы. и.. и условие "$d" != "TTT" исключите каталог TTT так для предотвращения себя копия. Можно записать bash сценарий с 2 аргументами сохраняет к локальному или системному мусорному ведру и использует его при необходимости.

0
27.01.2020, 21:32
  • 1
    Вы никогда не должны анализировать ls. См. mywiki.wooledge.org/ParsingLs. –  Chris Down 09.11.2012, 13:23
  • 2
    @ChrisDown: Это правда. Но обычно, если Вы знаете о существующих файлах на машине, Вы администрируете, непосредственно парсинг не должен быть проблемой. Я анализировал вывод ls в моей системе в течение долгого времени теперь, без любых проблем. Но затем я знаю для того, что ни один из моих файлов не содержит вредных символов. В случае новой или неизвестной системы, да, НИКОГДА не анализируют вывод ls. –  darnir 09.11.2012, 17:35
  • 3
    Рассмотрение альтернативы еще короче (for d in *), и более интуитивный, просто кажется действительно странным сделать независимо от того, хорошо работает ли это обычно. –  Chris Down 09.11.2012, 17:39

Теги

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