Как отменить команду rm?

Альтернатива созданию split печать, которую состоят в том, чтобы обнаружить имена файлов, когда файлы готовы. На Linux можно использовать inotify средство, и конкретно inotifywait утилита.

inotifywait -m -q -e close_write --format %f carga | parallel ./carga_postgres.sh &
split -l 50000000 2011.psv carga/2011_

Необходимо будет уничтожить inotifywait вручную. Уничтожение его автоматически немного трудно, потому что существует потенциальное состояние состязания: если Вы уничтожаете его как только split концы, это, возможно, получило события, о которых это еще не сообщило. Чтобы удостовериться, что обо всех событиях сообщают, считайте файлы соответствия.

{
  sh -c 'echo $PPID' >inotifywait.pid
  exec inotifywait -m -q -e close_write --format %f carga
} | tee last.file \
  | parallel ./carga_postgres.sh &
split -l 50000000 2011.psv carga/2011_
(
  set carga/2011_??; eval "last_file=\${$#}"
  while ! grep -qxF "$last_file" last.file; do sleep 1; done
)
kill $(cat inotifywait.pid)

8
05.11.2015, 10:51
4 ответа

Для выполнения запроса 1 вам потребуется более сложная программа, чем yes, чтобы послать y N количество раз и затем передать ввод с клавиатуры сверх этого. Вы не можете сделать это с помощью rm, кроме как всегда спрашивать (rm -i) или никогда не спрашивать (rm -f).

Вы всегда можете прервать rm,

  • нажав Control-C, чтобы прервать его (посылает SIGINT),
  • нажав Control-Z, чтобы остановить его (посылает SIGSTOP) и затем убить его,
  • послав SIGTERM (kill) или
  • послав ему SIGKILL (kill -9).

Это не отменит никаких файловых операций, которые rm уже выполнил, но помешает ему выполнять дальнейшие файловые операции. Если процесс rm в данный момент запрашивает ввод пользователя, он не выполняет активного отсоединения файлов, поэтому его уничтожение просто помешает ему продолжить работу.

19
27.01.2020, 20:08

В bash вы можете обойти псевдоним, добавив к команде \ , поэтому

rm filename

становится

\rm filename
1
27.01.2020, 20:08

GNU rm поддерживает -i, который, как я предполагаю, является тем, что вы имеете в виду, и запрашивает подтверждение для каждого файла, но также -I, что немного отличается:

-I     prompt once before removing  more  than  three  files,  or  when
       removing  recursively.  Less intrusive than -i, while still giv‐
       ing protection against most mistakes

Что касается того, можно ли остановить взаимодействие с rm после того, как оно после того, как оно началось, нажатие Ctrl-C должно сделать это.

10
27.01.2020, 20:08

с помощью Ctrl + c вы сможете отменить операцию.

Но если вы посмотрите в свой файл .bashrc , вы можете прокомментировать псевдоним, который вызывает подтверждение, он использует параметр -i как расширенный dhag.

в вашем .bashrc вы найдете такую ​​запись:

alias rm='rm -i'

если вы прокомментируете ее, ваш rm -f будет работать напрямую

2
27.01.2020, 20:08

Теги

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