Параллель GNU не доступна на моей платформе. Есть ли способ сделать это с помощью xargs (я не хочу запускать больше экземпляров gz, чем количество ядер).
user2284570 10 лет назад
0
2 ответа на вопрос
6
terdon
I found this, which suggests using the --gnu flag:
parallel --gnu gunzip ::: *gz
If this works, you should either delete /etc/parallel/config or change its contents to --gnu rather than --tollef (as root):
Это полностью работает .. спасибо за советы и исправления.
gc5 11 лет назад
0
Синтаксический анализ выходных данных `ls` менее важен при передаче в GNU Parallel. Пока у вас нет злоумышленников, делающих имена файлов, содержащие \ n, вы в безопасности. В этом случае, однако, `::: * .gz`, вероятно, будет лучшим.
Ole Tange 11 лет назад
1
Поместить \ n в имена файлов действительно весело, спасибо за подсказку. Однако для небольших задач администратора это не должно быть проблемой, поэтому не стоит привыкать использовать какой-то другой инструмент IMHO.
Aki 10 лет назад
0
@ Аки На самом деле ОЧЕНЬ много стоит выработать привычку использовать правильный инструмент для работы. Выходные данные `ls` изменяются между * nix-вариантами и настройками локали, это имеет тенденцию ломаться на любом виде пробела, не только на новых строках, вы избежите большой боли, если привыкнете не анализировать ls. Globbing это и проще, и безопаснее.
terdon 10 лет назад
0
@terdon: `для i в $ (ls) выполните команду" $ i "; готово`, я очень часто этим пользуюсь и не всегда подхожу. Привыкание к привычкам, понимание ограничений инструментов, которые я использую, конечно, при выполнении чувствительных задач важно быть осторожным, но нужно оставить место для быстрых идиом, которые просто работают, независимо от того, что они не подходят для всего
Aki 10 лет назад
0
@Aki `для меня в *; выполнить команду "$ i"; done` легче написать и безопаснее Почему вы хотите выучить идиому, которая сложнее и рискованнее? Попробуйте `for i in $ (ls)` в каталоге, содержащем файлы с пробелами в именах. Серьезно, синтаксический анализ `ls 'почти всегда не является правильным или самым простым способом сделать что-либо. Если глобирование не вариант, используйте `find`. Если вы настаиваете на использовании `ls`, по крайней мере, не используйте цикл` for`, это намного безопаснее: `ls | пока читаю я; выполнить команду "$ i"; по крайней мере, это не сломается на пробелах.
terdon 10 лет назад
1
@terdon: не думал об использовании там глобинга и спасибо за совет цикла пока. Я продолжал использовать что-то, потому что я бы не стал учиться лучше, это исправлено
Aki 10 лет назад
0
@terdon: GNU параллель не доступна на моей платформе. Есть ли способ сделать это с помощью xargs (я не хочу запускать больше экземпляров gz, чем количество ядер).
user2284570 10 лет назад
0
0
parkydr
Doing this works:
ls *.gz | parallel -t gunzip
The -t is optional but is useful as it shows you the commands that are executed on stderr.
I'm not sure you are doing anything wrong ::: should work (it's meant to be equivalent) but not even the examples in the man page work for me.
Update: the --gnu flag makes it work as terdon said.
Я не знаю почему, но это не работает: `gzip: stdin: не в формате gzip` .. В любом случае, спасибо
gc5 11 лет назад
0
Странно, у меня работает
parkydr 11 лет назад
0
Да, это странно .. Какую платформу вы используете?
gc5 11 лет назад
0
Debian Джесси / Сид (тестирование). У ваших файлов были пробелы в именах?
parkydr 11 лет назад
0
Пространства работали также
parkydr 11 лет назад
0
Нет у них нет .. Я использую Ubuntu 12.04 LTS ..
gc5 11 лет назад
0