Выполните цикл на удаленной машине.
ssh -q id@server "for account in ${accounts}; do touch EVENTS_\${account}_${date}.log; done"
Обратите внимание, что я принимаю это $accounts
и $date
не содержите специальные символы оболочки ("$'()&;<>[\]`{|}~
). В paricular, $accounts
будет интерполирован в удаленную оболочку, затем интерпретируемую там. Если необходимо защитить специальные символы, необходимо быть более осторожными с заключением в кавычки:
q=\'\\\'\' # '\'' effectively quotes a single quote inside single quotes
ssh -q id@server 'for account in '\'"${accounts//\'/$q}"\''; do touch "EVENTS_${account}_${date}.log"; done'
С другой стороны, смонтируйте удаленную файловую систему с sshfs и работой над ним, как Вы были бы локально.
mkdir mnt
sshfs id@server mnt
for account in ${accounts}; do touch "mnt/EVENTS_\${account}_${date}.log"; done
Эти команды не работали, потому что подстановочные шаблоны опускают точечные файлы (файлы, имя которых начинается с символа .
) если точка не появляется явно в шаблоне. Так *.un~
соответствия yourfile.txt.un~
но нет .myfile.txt.un~
, тогда как .*.un~
действительно соответствует .myfile.txt.un~
.
Необходимо смочь использовать find(1)
для этого (find
подстановочный знак, соответствующий, не рассматривает точечные файлы особенно):
find / -name "*.un~" -not -path "~/.tmp/*" -delete
Это говорит, находят для поиска /
для всего соответствия файлов *.un~
это не находится в ~/.tmp
и удалите их. Если Вы взлетаете -delete
это просто произведет список, таким образом, можно будет проверить и удостовериться, что это не собирается удалять неправильные вещи. Вы также могли бы хотеть бросить -mount
там, чтобы мешать ему искать другие файловые системы Вы смонтировались
*
не разворачивает точечные файлы. Необходимо будет сказать, например:
rm ./.*.un~
Если Вы используете find
, который, вероятно, был бы самым легким, я буду использовать
find -iname ".*.un~" ...
вместо:
find -iname "*.un~" ...
Поскольку последний соответствовал бы foo.un~
а также .foo.un~
.
И, да, сделайте пробный прогон сначала, чтобы быть уверенными, что у Вас есть корректные соответствия.