Я новый пчела для bash-скриптов. при изучении Advanced bash scripting я столкнулся с этой командой. Я не понимаю, как работает команда и каково использование фигурных скобок. Заранее спасибо.
ответ
Ваша команда:
ls . | xargs -i -t cp ./{} $1
можно разделить на следующие части:
ls .
Список текущий каталог (это перечислит все файлы/каталоги, но скрытые)
| xargs -i -t cp ./{} $1
В основном, xargs разбивает выходные данные по каналам (в этом случае ls) и предоставляет каждый элемент в списке в качестве входных данных для следующей команды (cp в этом случае). Параметр -t должен показать в stderr, что фактически выполняет xargs. -i используется для замены строк. В этом случае, поскольку ничего не было предоставлено, он будет вводить {}. $ 1 - это имя места назначения, в котором будут скопированы ваши файлы (я думаю, в этом случае это должен быть каталог для команды, чтобы иметь смысл, иначе вы будете копировать все файлы в один и тот же пункт назначения).
Так, например, если вы скажете каталог, в котором есть файлы с именем a, b, c. При выполнении этой команды он будет выполнять следующее:
cp ./a $1
cp ./b $1
cp ./c $1
ПРИМЕЧАНИЕ:
-i устарел, -I (прописные я) следует использовать вместо
Я голосую, чтобы закрыть этот вопрос как вне темы, потому что он лучше подходит для unix.stackexchange.com. –
@UlrichSchwarz IMHO Unix и SO немного перекрываются. Я бы сказал, что по этой причине вопрос не в тему. Однако тот факт, что OP не в состоянии проверить «человеческие харги», прежде чем задавать вопрос о SO, действительно немного меня пугает. Боюсь, что иногда это не помогает. Многие люди используют его, чтобы не исследовать достаточно трудно для себя. – hek2mgl
Это сложный способ записи 'cp * $ 1' - но он имеет достоинство работы, даже если в текущем каталоге столько файлов, что' * 'расширяется, так что он слишком велик, чтобы вписаться в список аргументов 'cp'. Напротив, он выполняет одну команду копирования для каждого файла, что дорого, если есть так много файлов, что это необходимо. –