
Я хочу выполнить команду, которая принимает несколько аргументов, которые находятся в разных каталогах под одним и тем же именем файла, например
mycommand dir-001/myfile dir-002/myfile dir-003/myfile … dir-048/myfile
Я ищу какую-нибудь команду оболочки, которая могла бы поместить все файлы в подкаталоги, пронумерованные от 1 до 48 или любым другим числом в качестве аргументов команды.
решение1
Вы можете использовать стандартную подстановку имен файлов, например, для всех трехзначных чисел (по порядку):
$ mycommand dir-[0-9][0-9][0-9]/myfile
При использовании базовой подстановки вам понадобится один шаблон для однозначных чисел, один для двузначных и т. д.
$ mycommand dir-[0-9]/myfile dir-[0-9][0-9]/myfile
Zsh (но не другие оболочки) также поддерживает mycommand dir-<->/myfile
, или , например, mycommand dir-<3-42>/myfile
для каталогов с номерами от 3 до 42.
Или, если вы предпочитаете расширение скобок (и ваша оболочка это поддерживает):
$ mycommand dir-{1..3}/myfile
Если имена ваших каталогов содержат начальные нули, заключите их в фигурные скобки, например dir-{001..048}/myfile
, .
С помощью раскрытия скобок вы также можете сделать (в ksh93 и zsh, но не в bash)
$ mycommand dir-{1..$n}/myfile
где $n
расширяется до некоторого целого числа.
решение2
find . -type f -name myfile | xargs command