Улучшить 'mv' для требования явной цели определения?

Вы можете использовать unetbootin для установки любого дистрибутива на любое устройство. Это автономный исполняемый файл, поэтому нечего устанавливать, просто загрузите его и запустите.

Unetbootin предлагает большинство hte основных дистрибутивов как живых, так и обычных версий.

ss of unetbootin

ss of unetbootin

ПРИМЕЧАНИЕ: Что эти живые дистрибутивы - больше, чем просто одна и та же система между перезагрузками. Многие предлагают динамическую область, где изменения могут быть сохранены, так что вы можете установить дополнительное программное обеспечение и настроить ваш рабочий стол, и он останется для вашей следующей перезагрузки.

Например, взгляните на документацию Ubuntu Persistence documentation :

Эта страница объясняет, как улучшить LiveCD только для чтения, добавив постоянное файловое хранилище на другом диске. В более поздней версии Ubuntu версии, вы можете вместо этого использовать usb-создатель инструмент для создания загрузочный USB флэш-накопитель с Live CD, и его пользовательский интерфейс имеет возможность добавить постоянную память на тот же самый USB-накопитель

0
13.04.2017, 15:36
3 ответа

Наиболее распространенный способ добавить дополнительную защиту от подобных ошибок - поместить следующие три псевдонима в rc-файл оболочки (~/.bashrc в bash случае):

alias cp="cp -i"
alias mv="mv -i"
alias rm="rm -i"

Ключ -i означает интерактивный, и он подскажет вам, прежде чем перезаписывать или удалять файлы.

rm также имеет другую адаптацию:

-I                    prompt once before removing more than three files, or
                      when removing recursively.  Less intrusive than -i,
                      while still giving protection against most mistakes
1
28.01.2020, 02:20

Синтаксис mv давно увлекает администраторов и пользователей, не говоря уже о почти бесчисленном множестве скриптов, вызывающих mv, так что изменение пользовательского интерфейса сломает многое. Было бы лучше написать обертку (или совершенно новый инструмент), который ожидает явной цели.

2
28.01.2020, 02:20

Команда не может знать, какие подстановочные знаки были расширены, чтобы составить свои аргументы.

В zsh перед командой можно добавить модификатор noglob для предотвращения расширения wildcard. Это позволяет вам определить обертку, которая отвергает вызов, если последний аргумент содержит подстановочные символы.

mv_check_last_argument () {
  local last
  setopt local_options null_glob
  last=(${~${(P)#}})
  if [[ $#last -eq 1 && $last[1] = ${(P)#} ]]; then
    command mv $~@[@]
  else
    echo 1>&2 "Not running mv because '${(P)#}' is a wildcard pattern"
    return 125
  fi
}
alias mv='noglob mv_check_last_argument'

(Предупреждение: непроверенный код)

Это, конечно, лишает вас возможности использовать подстановочные символы, когда вы намереваетесь соответствовать одному каталогу назначения, но это обычно не очень полезно, потому что вы можете использовать вместо него completion. Когда вы хотите использовать подстановочные знаки, используйте \mv ... с обратным слешем для подавления псевдонима.

Ошибки с mv легко исправить, если вы не перезаписали существующий целевой файл. Чтобы избежать перезаписи целевого файла, есть простой способ: запустить mv -i вместо mv. Таким образом mv только выполняет задание по перемещению файла и спрашивает, нужно ли ему выполнить дополнительное задание по удалению файла. Снова используйте \mv ..., чтобы пропустить псевдоним и безоговорочно перезаписать цель, если она уже существует.

alias cp='cp -i' mv='mv -i'
1
28.01.2020, 02:20

Теги

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