Альтернатива созданию 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)
Для выполнения запроса 1 вам потребуется более сложная программа, чем yes
, чтобы послать y
N количество раз и затем передать ввод с клавиатуры сверх этого. Вы не можете сделать это с помощью rm
, кроме как всегда спрашивать (rm -i
) или никогда не спрашивать (rm -f
).
Вы всегда можете прервать rm
,
kill
) или kill -9
). Это не отменит никаких файловых операций, которые rm
уже выполнил, но помешает ему выполнять дальнейшие файловые операции. Если процесс rm
в данный момент запрашивает ввод пользователя, он не выполняет активного отсоединения файлов, поэтому его уничтожение просто помешает ему продолжить работу.
В bash
вы можете обойти псевдоним, добавив к команде \
, поэтому
rm filename
становится
\rm filename
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 должно сделать это.
с помощью Ctrl + c вы сможете отменить операцию.
Но если вы посмотрите в свой файл .bashrc
, вы можете прокомментировать псевдоним, который вызывает подтверждение, он использует параметр -i
как расширенный dhag.
в вашем .bashrc
вы найдете такую запись:
alias rm='rm -i'
если вы прокомментируете ее, ваш rm -f
будет работать напрямую