2016-08-08 6 views
0

Я новичок в оболочке, и я хотел бы узнать, однако, это кажется немного слишком сложным для понимания:Что означает {} в "xargs -I {} unrar x {}"?

find . \(-name *.rar \) | xargs -I {} unrar x {}

Можете ли вы объяснить, шаг за шагом, что это делает. Я знаю, что он попадает в папки и находит все найденные файлы .rar, а затем он связывает файлы, которые он находит во второй части команды, используя символ |. Однако, я не понимаю часть xargs -I {} unrar x {} и команду {} в частности. Я знаю, что unrar извлекает архив.

+1

Я думаю, что 'человек xargs' может помочь вам. – ArtOfWarfare

+2

См. Пошаговое объяснение на [explainhell.com] (http://explainshell.com/explain?cmd=find+.+%5C%28+-name+*.rar+%5C%29+%7C+xargs+- I +% 7B% 7D + unrar + x +% 7B% 7D) –

+2

Это тоже довольно неоправданно ужасно. Нет смысла писать это, чтобы использовать 'xargs' вообще, учитывая' find -exec', а использование xargs вводит ошибки (посмотрите, что произойдет, если у вас есть rar-файл с пробелом в его имени. –

ответ

3

{} является заполнителем, замененным именем файла в сгенерированной команде.

Однако не использует этот код; он будет вести себя плохо с rar архивами, имеющими необычные имена, или, если в текущем каталоге (в отличие от поддиректорий) есть файлы, соответствующие *.rar. Рассмотрим вместо:

find . -name '*.rar' -exec unrar x '{}' ';' 

... или, если вы действительно хотите использовать xargs:

find . -name '*.rar' -print0 | xargs -n 1 -0 unrar x 
Смежные вопросы