Выполнить команду для файлов с одинаковыми именами из нескольких каталогов

Выполнить команду для файлов с одинаковыми именами из нескольких каталогов

Я хочу выполнить команду, которая принимает несколько аргументов, которые находятся в разных каталогах под одним и тем же именем файла, например

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

Связанный контент