Сервер каталогов Centos / 389 серверов каталогов - какие-либо различия?

(Предупреждение: Я не протестировал ни одной из этих команд. Могут быть опечатки или ошибки. Попробуйте все echo или ls и нет sudo сначала.)

Общие рекомендации: xargs редко самый простой способ сделать что-то. Без -i (который удерживается от использования между прочим, используйте портативное устройство -I {} вместо этого), xargs ожидает формат ввода, который не производит никакой стандартный или общий инструмент. С -I, xargs действительно имеет некоторое использование, хотя, если Вы передаете по каналу find в него, find -exec более просто.

Вам нужна оболочка для расширения {}/*, и та оболочка должна действовать после {} был заменен одним фактическим путем. Простое решение состоит в том, чтобы сделать линию за линией обработку в оболочке. Отметьте использование трех шаблонов для получения всех файлов в каталоге как * опускает точечные файлы; не имеет значения, если некоторые шаблоны не соответствуют никакому файлу, как rm -f игнорирует любой аргумент, который не ссылается на существующий файл.

… |
while read -r line; do
  sudo rm -rf -- "$line"/* "$line"/.[!.]* "$line"/..?*
done

Xargs бесполезен здесь, так как необходимо обработать файлы один за другим так или иначе в какой-то момент, чтобы заставить оболочку выполнять globbing. Поскольку общая техника может быть полезной однако, вот способ подать имена файлов назад в оболочку от xargs. _ $0 аргумент оболочке (этому не придется там частично потрудиться придерживаться $0 назад на любой последующий аргумент, и гарантировать, что все работает даже если $1 начинается с a - и так иначе рассматривался бы как опцию к оболочке). Здесь существует два подхода: или имейте цикл оболочки по его аргументам или скажите xargs передавать отдельный аргумент каждому вызову оболочки.

… | xargs -I {} sudo sh -c 'for x; do rm -rf -- "$x"/* "$x"/.[!.]* "$x"/..?*; done' _ {}
… | xargs -I {} -n 1 sudo sh -c 'rm -rf -- "$1"/* "$1"/.[!.]* "$1"/..?*' _ {}

Я принимаю это ls -d a* игрушечный пример и что у Вас есть более сложная команда, которая производит одно имя файла на строку. Отметьте это ls -d a* не работал бы там, как большинство ls реализации не производят непечатаемые символы прозрачно. Если команда находки, использовать -exec, как в

find a* -exec sh -c 'rm -rf -- "$1"/* "$1"/.[!.]* "$1"/..?*' _ {} \; -prune
1
16.11.2011, 14:15
1 ответ

Это действительно имеет место. 389 родительский проект для этих сервисов. Имя изменилось на это, чтобы лишить от брендинга того, чтобы быть "Red Hat" и поощрить принятие через другие разновидности Linux.

2
27.01.2020, 23:40

Теги

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