Удалите все файлы отката Vim во всех кроме одного каталога

Выполните цикл на удаленной машине.

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

6
28.02.2013, 01:08
2 ответа

Эти команды не работали, потому что подстановочные шаблоны опускают точечные файлы (файлы, имя которых начинается с символа .) если точка не появляется явно в шаблоне. Так *.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 там, чтобы мешать ему искать другие файловые системы Вы смонтировались

5
27.01.2020, 20:25

* не разворачивает точечные файлы. Необходимо будет сказать, например:

rm ./.*.un~

Если Вы используете find, который, вероятно, был бы самым легким, я буду использовать

find -iname ".*.un~" ...

вместо:

find -iname "*.un~" ...

Поскольку последний соответствовал бы foo.un~ а также .foo.un~.

И, да, сделайте пробный прогон сначала, чтобы быть уверенными, что у Вас есть корректные соответствия.

4
27.01.2020, 20:25
  • 1
    Спасибо. Я не понял, что подстановочные знаки не расширяются после dotfiles. Очень ценивший. –  turtle 27.02.2013, 19:30
  • 2
    @turtle, что можно нажать галочку рядом с ответом для принятия его –  Michael Mrozek♦ 02.03.2013, 09:25

Теги

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