Подстановочный знак не работает с переименованием при переименовании имен файлов в папке

Это потому, что exec.sh является локальным и выполняет команду на удаленной машине. Итак, если вы убьете локальный процесс, удаленный процесс все равно будет работать.

Чтобы достичь того, что вы хотите, вам нужно, чтобы exec.sh ловил СИГНАЛ нажатия CTRL+C и перед самоуничтожением уничтожал команду на удаленном хосте.

function trap_ctrlc ()
{
# kill the remote process
  ssh user@pass "pkill -9 python"

  exit 2 
}

# initialise trap to call trap_ctrlc function
# when signal 2 (SIGINT) is received
trap "trap_ctrlc" 2

your script here

Осторожно :python — очень общий процесс для уничтожения. ID процесса лучше сохранять при запуске, а потом специально убивать по ID

1
04.10.2019, 12:02
1 ответ

Предположим, что ваша renameутилита является утилитой Perl rename(, которая принимает выражение Perl, обычно выражение подстановки, в качестве первого аргумента):

$ ls -l
total 0
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file1_S1_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file2_S2_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file3_S95_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file4_S143_R1
$ rename 's/_S\d*_/_/g' *
$ ls -l
total 0
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file1_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file2_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file3_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file4_R1

Вы неправильно поняли регулярное выражение, возможно, предположив, что будете использовать шаблон подстановки имени файла, а не регулярное выражение Perl. Я исправил это, изменивS*(соответствует нулю или более Sсимволов )наS\d*(соответствует S, за которым следует ноль или более цифр ).

2
27.01.2020, 23:30

Теги

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